******** fig10.55 ********** unsigned int seed; /* global variable */ #define a 16807 /* 7^5 */ #define m 2147483647 /* 2^31 - 1*/ #define q 127773 /* m/a */ #define r 2836 /* m%a */ double random( void ) { int tmp_seed; tmp_seed = a * ( seed % q ) - r * (seed / q ); if( tmp_seed >= 0 ) seed = tmp_seed; else seed = tmp_seed + m; return( ( (double) seed ) / m ); }