static int set_up_dcmt (int n, int self, unsigned int seed) { mt_struct **mtss; int w = 32; int p = 521; /* period = 2^521-1 =~ 6.9e+156 */ int dseed = 4172; int i, count = 0; mtss = get_mt_parameters_st(w, p, 0, n - 1, dseed, &count); if (mtss == NULL) { fprintf(stderr, "Couldn't get MT parameters\n"); return E_DATA; } #if 0 fprintf(stderr, "set_up_dcmt: set up %d MTs, self = %d\n", n, self); #endif use_dcmt = 1; dcmt_seed = seed != 0 ? seed : time(NULL); for (i=0; i<count; i++) { if (i == self) { dcmt = mtss[i]; sgenrand_mt(dcmt_seed, dcmt); } else { free_mt_struct(mtss[i]); } } free(mtss); return 0; }
// Use different ids for different generators // Use different seeds for starting at different positions in sequence Random newRandom(int id, uint32 seed) { Random mt = get_mt_parameter_id_st(32,521,id,seed); if (mt == NULL) { fprintf(stderr,"\nnewRandom: get_mt_parameter_id_st failed\n"); exit(1); } sgenrand_mt(seed, mt); return mt; }
void generator(int k) { int j; for (j=0;j<k;j++) { /* This trys to find a small Mersenne Twister with period 2^521-1. */ mts[j] = get_mt_parameter_id_st(32,19937,rand() % 65536,4172); if (mts[j] == NULL){printf("Error on %d thread.\n", j);} else {sgenrand_mt(3241+40*j,mts[j]);} } }
extern "C" void RandomRef( float *h_Random, int NPerRng, unsigned int seed ){ int iRng, iOut; for(iRng = 0; iRng < MT_RNG_COUNT; iRng++){ MT[iRng].state = state; sgenrand_mt(seed, &MT[iRng]); for(iOut = 0; iOut < NPerRng; iOut++) h_Random[iRng * NPerRng + iOut] = ((float)genrand_mt(&MT[iRng]) + 1.0f) / 4294967296.0f; } }
int gretl_rand_set_dcmt (int s) { int err = 0; if (s == use_dcmt) { /* no-op */ return 0; } if (s) { /* sfmt in use, dcmt requested */ if (dcmt == NULL) { /* dcmt not set up already */ #ifdef HAVE_MPI err = dcmt_late_start(); #else err = E_DATA; #endif } else { /* reset seed and octet */ dcmt_seed = time(NULL); sgenrand_mt(dcmt_seed, dcmt); gretl_rand_octet(NULL); } } else { /* dcmt in use, sfmt requested */ gretl_rand_init(); } if (err) { gretl_errmsg_set("dcmt: not available"); } else { use_dcmt = s; } return err; }
int main(void) { int i,j; mt_struct *mts; init_dc(4172); /* This trys to find a small Mersenne Twister with period 2^521-1. */ mts = get_mt_parameter(32,521); if (mts == NULL) { printf ("error\n"); } else { sgenrand_mt(3241, mts); for (i=0; i<100; i++) { for (j=0; j<5; j++) printf("%8x ", genrand_mt(mts)); printf("\n"); } free_mt_struct(mts); } return 0; }
static void gretl_dcmt_set_seed (unsigned int seed) { dcmt_seed = seed; sgenrand_mt(dcmt_seed, dcmt); }