/****************************** pmrandom.h *************************** Purpose: Implement a random-number generator package for this program. Provenance: Written and tested by Q. Chen and E. Fox, March 1991. Edited by S. Wartik, April 1991. Notes: It is assumed that the C data type "int" can store 32-bit quantities. **/ #include "pmrandom.h" static int seed = DEFAULT_SEED; /* The seed of the random number generator. */ /************************************************************************* setseed(int) Returns: int Purpose: Set the seed for the random number generator. Plan: Uses a formula suggested by Park and Miller. See above. Notes: None. **/ void setseed( new_seed ) int new_seed; { int low, high, test; if ( (new_seed < 1) || (new_seed > 2147483646) ) new_seed = DEFAULT_SEED; high = new_seed / 127773; /* 127773 = 2147483647 div 16807 */ low = new_seed % 127773; test = 16807 * low - 2836 * high; /* 2836 = 2147483647 mod 16807 */ seed = ( test > 0 ) ? test : test + 2147483647; } /************************************************************************* pmrandom() Returns: void Purpose: Return the next random number in the sequence. Plan: Uses the formula: f() = ( 16807 * seed ) mod 2147483647. The value of "seed" must be within [1, ..., 2147483646]. Notes: None. **/ int pmrandom() { int tmp = seed; setseed(seed); return(tmp); } /*********************************************************************** getseed() Returns: int Purpose: Get the current value of the seed. Notes: None. **/ int getseed() { return (seed); }