X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Frandom.c;h=cae3f9e70a3fb9f0f05411bfa3114509d9fd768c;hb=7b98b3a4f58f6dc5a8e9cbc188b627966d5e652d;hp=163986cc959e319df0b32a26c16fe78b2f6a44b8;hpb=f61e279fa8d35fa2f9c5ef6d5d0e628147ccde60;p=pspp diff --git a/src/random.c b/src/random.c index 163986cc95..cae3f9e70a 100644 --- a/src/random.c +++ b/src/random.c @@ -49,12 +49,13 @@ rng_create (void) static time_t t=0; rng = xmalloc (sizeof *rng); - if (t == 0 || set_seed == NOT_LONG) + if (t == 0 || set_seed_used) { if (set_seed == NOT_LONG) time (&t); else t = set_seed; + set_seed_used=0; } else t++; @@ -159,10 +160,16 @@ rng_get_unsigned (struct rng *rng) double rng_get_double (struct rng *rng) { - unsigned long value; - - rng_get_bytes (rng, &value, sizeof value); - return value / (double) ULONG_MAX; + for (;;) + { + unsigned long ulng; + double dbl; + + rng_get_bytes (rng, &ulng, sizeof ulng); + dbl = ulng / (ULONG_MAX + 1.0); + if (dbl >= 0 && dbl < 1) + return dbl; + } } /* Returns a random number from the distribution with mean 0 and