diff options
author | eb | 2009-01-15 10:23:50 +0000 |
---|---|---|
committer | eb | 2009-01-15 10:23:50 +0000 |
commit | 4b5cfa809a01a494c4f5e6b052414ed9b3d066cb (patch) | |
tree | 1524eb995c21cccb3d76f62ec0cc8bf9a319a54f /gcell/lib/runtime/spu/gc_random.c | |
parent | ddd347cc96e38c3758dea53cb0d93391ea566a35 (diff) | |
download | gnuradio-4b5cfa809a01a494c4f5e6b052414ed9b3d066cb.tar.gz gnuradio-4b5cfa809a01a494c4f5e6b052414ed9b3d066cb.tar.bz2 gnuradio-4b5cfa809a01a494c4f5e6b052414ed9b3d066cb.zip |
Merged eb/gcell-wip -r10213:10230 into the trunk. This reduces the
overhead of off-loading jobs, such that it is now feasible to off-load
50us jobs on the QS21 and 10us jobs on the PS3. See wiki:Gcell for
performance graphs. There is still plenty of room for improvement.
I'll be revisiting this in a week or so.
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10231 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gcell/lib/runtime/spu/gc_random.c')
-rw-r--r-- | gcell/lib/runtime/spu/gc_random.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcell/lib/runtime/spu/gc_random.c b/gcell/lib/runtime/spu/gc_random.c index 214309b53..ae2fde875 100644 --- a/gcell/lib/runtime/spu/gc_random.c +++ b/gcell/lib/runtime/spu/gc_random.c @@ -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); } |