summaryrefslogtreecommitdiffstats
path: root/src/lib9/rand.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib9/rand.c')
-rw-r--r--src/lib9/rand.c81
1 files changed, 0 insertions, 81 deletions
diff --git a/src/lib9/rand.c b/src/lib9/rand.c
index 34f77eca..ecb9eac9 100644
--- a/src/lib9/rand.c
+++ b/src/lib9/rand.c
@@ -1,86 +1,5 @@
#include <lib9.h>
-/*
- * algorithm by
- * D. P. Mitchell & J. A. Reeds
- */
-
-#define LEN 607
-#define TAP 273
-#define MASK 0x7fffffffL
-#define A 48271
-#define M 2147483647
-#define Q 44488
-#define R 3399
-#define NORM (1.0/(1.0+MASK))
-
-static ulong rng_vec[LEN];
-static ulong* rng_tap = rng_vec;
-static ulong* rng_feed = 0;
-static Lock lk;
-
-static void
-isrand(long seed)
-{
- long lo, hi, x;
- int i;
-
- rng_tap = rng_vec;
- rng_feed = rng_vec+LEN-TAP;
- seed = seed%M;
- if(seed < 0)
- seed += M;
- if(seed == 0)
- seed = 89482311;
- x = seed;
- /*
- * Initialize by x[n+1] = 48271 * x[n] mod (2**31 - 1)
- */
- for(i = -20; i < LEN; i++) {
- hi = x / Q;
- lo = x % Q;
- x = A*lo - R*hi;
- if(x < 0)
- x += M;
- if(i >= 0)
- rng_vec[i] = x;
- }
-}
-
-void
-srand(long seed)
-{
- lock(&lk);
- isrand(seed);
- unlock(&lk);
-}
-
-long
-lrand(void)
-{
- ulong x;
-
- lock(&lk);
-
- rng_tap--;
- if(rng_tap < rng_vec) {
- if(rng_feed == 0) {
- isrand(1);
- rng_tap--;
- }
- rng_tap += LEN;
- }
- rng_feed--;
- if(rng_feed < rng_vec)
- rng_feed += LEN;
- x = (*rng_feed + *rng_tap) & MASK;
- *rng_feed = x;
-
- unlock(&lk);
-
- return x;
-}
-
int
rand(void)
{