/* faure.c: Faure's QMC sequences */ #include #include #include "faure.h" #define MAXDIM 10 #define PRDIM 30 #define MAXSEED 2147483647 static int ix[MAXDIM][PRDIM]; /* PR-delige voorstelling van x */ static int dim, PR, priem[MAXDIM]={2, 3, 5, 5, 7, 7, 11, 11, 11, 11}; /* priem[s] is 1e priemgetal >s*/ static int nextn, skip, ndigits; static int C[MAXDIM][PRDIM][PRDIM]; /* generator matrix */ static int setFaureC(void) { int i, j, k; /* eerst C[0][][] opstellen (getransponeerde Pascal matrix) */ for(j=0; j wordt eenheidsmatrix */ for(i=dim-1; i>=0; i--) for(j=0; j=0; j--) { ix[i][j]=(ix[i][j]+C[i][j][k-1])%PR; xx=xx/PR+ix[i][j]; } x[i]=xx/PR; } nextn+=1; return x; } double *Faure(int seed) { int i, j, k, save; static double x[MAXDIM]; double xx; nextn = seed+skip+1; #ifndef NO_GRAY /* compute Gray code */ i = nextn; j = nextn/PR; k = 1; nextn = 0; while (i) { nextn += (((i%PR) + PR - (j%PR))%PR) * k; k *= PR; i /= PR; j /= PR; } #endif /*NO_GRAY*/ for (i=0; i=0; j--) { save=nextn; ix[i][j] = 0; for (k=0; k