random numbers
Andrew Hume
andrew at alice.UUCP
Wed Aug 30 14:34:46 AEST 1989
if you can tolerate a congruential style generator, try this:
/*
random number generator from cacm 31 10, oct 88
for 32 bit integers (called long here)
*/
#ifdef MAIN
#define A 16807 /* good numbers */
#define M 2147483647
#define Q 127773
#define R 2836
#else
#define A 48271 /* better numbers */
#define M 2147483647
#define Q 44488
#define R 3399
#endif
static long seed;
srand(unsigned newseed)
{
seed = newseed;
}
rand()
{
long lo, hi, test;
hi = seed/Q;
lo = seed%Q;
test = A*lo - R*hi;
if(test > 0)
seed = test;
else
seed = test+M;
return(seed);
}
#ifdef MAIN
main()
{
int i;
srand(1);
for(i = 0; i < 10000; i++)
rand();
if(seed == 1043618065)
printf("implementation looks correct\n");
else
printf("uh oh! seed=%u, should be 1043618065\n", seed);
exit(0);
}
#endif
compile with -DMAIN to test.
More information about the Comp.lang.c
mailing list