Merged eb/gcell-wip -r10213:10230 into the trunk. This reduces the
[debian/gnuradio] / gcell / lib / runtime / spu / gc_random.c
index 214309b53921d1346304543e976d8e9fae5b06da..ae2fde875b13599eb4f770ab7ad6938b3ea69e2b 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2008 Free Software Foundation, Inc.
+ * Copyright 2008,2009 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
@@ -22,9 +22,9 @@
 
 static int last_val = 0;
 
-#define        M  714025       // values from Numerical Recipes in C, 1988
-#define A    4096
-#define C  150889
+# define M  259200     // values from Numerical Recipes in C, 1988
+# define A    7141
+# define C   54773
 
 void 
 gc_set_seed(int seed)
@@ -32,9 +32,13 @@ gc_set_seed(int seed)
   last_val = ((unsigned int) seed) % M;
 }
 
+/*
+ * Return a uniformly distributed value in the range [0, 1.0)
+ * (Linear congruential generator. YMMV. Caveat emptor.)
+ */
 float
 gc_uniform_deviate(void)
 {
   last_val = (last_val * A + C) % M;
-  return (float) last_val / (float) M;
+  return (float) last_val * (1.0f / (float) M);
 }