From 0a8dc1a9440fc1c4e706f5d346895f67a329ce54 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 22 Mar 2001 06:14:18 +0000 Subject: Add in random(), make rand use that under the hood. Fix the include file so folks know random is now there. --- libc/stdlib/random.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 libc/stdlib/random.c (limited to 'libc/stdlib/random.c') diff --git a/libc/stdlib/random.c b/libc/stdlib/random.c new file mode 100644 index 000000000..c040ce455 --- /dev/null +++ b/libc/stdlib/random.c @@ -0,0 +1,36 @@ +#include + +/* + * This generator is a combination of three linear congruential generators + * with periods or 2^15-405, 2^15-1041 and 2^15-1111. It has a period that + * is the product of these three numbers. + */ + +static long int seed1 = 1; +static long int seed2 = 1; +static long int seed3 = 1; + +#define CRANK(a,b,c,m,s) \ + q = s/a; \ + s = b*(s-a*q) - c*q; \ + if(s<0) s+=m; + +long int random() +{ + register long int q; + + CRANK(206, 157, 31, 32363, seed1); + CRANK(217, 146, 45, 31727, seed2); + CRANK(222, 142, 133, 31657, seed3); + + return seed1 ^ seed2 ^ seed3; +} + +void srandom(unsigned int seed) +{ + seed &= RAND_MAX; + seed1 = seed % 32362 + 1; + seed2 = seed % 31726 + 1; + seed3 = seed % 31656 + 1; +} + -- cgit v1.2.3