#include #include /**************************** ** RANDOM NUMBER GENERATOR ** ***************************** ** This is a second-order linear congruential random number ** generator. Its advantage is (of course) that it can be ** seeded and will thus produce repeatable sequences of ** random numbers. */ /**************************** * randnum() * ***************************** ** Second order linear congruential generator. ** Constants suggested by J. G. Skellam. ** If val==0, returns next member of sequence. ** val!=0, restart generator. */ int32_t randnum(int32_t val) { static int32_t randw[2] = { 13 , 117 }; int32_t interm; if (val != 0) { randw[0] = 13; randw[1] = 117; } interm = (randw[0]* (int32_t)254754 + randw[1]*(int32_t)529562) % (int32_t)999563; randw[1] = randw[0]; randw[0] = interm; return(interm); } /**************************** * randwc() * ***************************** ** Returns signed 32-bit random modulo num. */ int32_t randwc(int32_t num) { return(randnum(0) % num); } /*************************** ** abs_randwc() ** **************************** ** Same as randwc(), only this routine returns only ** positive numbers. */ uint32_t abs_randwc(uint32_t num) { return abs(randwc(num)); }