X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/027f3abe8f56d9729fa87329b559a5723e34aed5..28f5ae5d207329ba6cc3419936d9434027c76a26:/src/surf/random_mgr.c diff --git a/src/surf/random_mgr.c b/src/surf/random_mgr.c index a5dc07f76f..2a28e072b5 100644 --- a/src/surf/random_mgr.c +++ b/src/surf/random_mgr.c @@ -5,23 +5,31 @@ #ifdef WIN32 static double drand48(void) { - THROW_UNIMPLEMENTED(); + THROW_UNIMPLEMENTED; return -1; } + +static double rand_r(unsigned int* seed) +{ + THROW_UNIMPLEMENTED; + return -1; +} + #endif -static double custom_random(int generator){ +static double custom_random(Generator generator, long int *seed){ switch(generator) { - - case DRAND48:return drand48(); - case RAND: return (double)rand()/RAND_MAX; + case DRAND48: + return drand48(); + case RAND: + return (double)rand_r((unsigned int*)seed)/RAND_MAX; default: return drand48(); } } /* Generate numbers between min and max with a given mean and standard deviation */ -float random_generate(random_data_t random){ - float x1, x2, w, y; +double random_generate(random_data_t random){ + double x1, x2, w, y; if (random == NULL) return 0.0f; @@ -31,8 +39,8 @@ float random_generate(random_data_t random){ y1 = sqrt( - 2 * log(x1) ) * cos( 2 * pi * x2 ) */ do { - x1 = 2.0 * custom_random(random->generator) - 1.0; - x2 = 2.0 * custom_random(random->generator) - 1.0; + x1 = 2.0 * custom_random(random->generator,&(random->seed)) - 1.0; + x2 = 2.0 * custom_random(random->generator,&(random->seed)) - 1.0; w = x1 * x1 + x2 * x2; } while ( w >= 1.0 ); @@ -46,9 +54,12 @@ float random_generate(random_data_t random){ return y; } -random_data_t random_new(int generator, int min, int max, int mean, int stdDeviation){ +random_data_t random_new(Generator generator, long int seed, + double min, double max, double mean, + double stdDeviation){ random_data_t random = xbt_new0(s_random_data_t, 1); random->generator = generator; + random->seed = seed; random->min = min; random->max = max; random->mean = mean;