Clean up pref.h.orig and deal with the consequences.
[pspp] / src / random.c
index 163986cc959e319df0b32a26c16fe78b2f6a44b8..cae3f9e70a3fb9f0f05411bfa3114509d9fd768c 100644 (file)
@@ -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