diff -r 723af8fef529 -r a3ef33a8694a generators/netgen/random.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/generators/netgen/random.c Fri Nov 26 19:23:47 2010 +0100 @@ -0,0 +1,47 @@ +/*** This is a portable random number generator whose origins are + *** unknown. As far as can be told, this is public domain software. + + +/*** portable random number generator */ + +/*** Note that every variable used here must have at least 31 bits + *** of precision, exclusive of sign. Long integers should be enough. + *** The generator is the congruential: i = 7**5 * i mod (2^31-1). + ***/ + +#define MULTIPLIER 16807 +#define MODULUS 2147483647 + +static long saved_seed; + + +/*** set_random - initialize constants and seed */ + +void set_random(seed) +long seed; +{ + saved_seed = seed; +} + + +/*** ng_random - generate a random integer in the interval [a,b] (b >= a >= 0) */ + +long ng_random(a, b) +long a, b; +{ + register long hi, lo; + + hi = MULTIPLIER * (saved_seed >> 16); + lo = MULTIPLIER * (saved_seed & 0xffff); + hi += (lo>>16); + lo &= 0xffff; + lo += (hi>>15); + hi &= 0x7fff; + lo -= MODULUS; + if ((saved_seed = (hi<<16) + lo) < 0) + saved_seed += MODULUS; + + if (b <= a) + return b; + return a + saved_seed % (b - a + 1); +}