[vox-tech] help: random number problem in C (yet again!)
Peter Jay Salzman
vox-tech@lists.lugod.org
Sat, 20 Apr 2002 10:49:28 -0700
hello all,
given the code:
#include <stdio.h>
#include <stdlib.h>
int Irand(int low, int high);
int main(void)
{
unsigned int N = 4;
unsigned int M = 4;
unsigned int count = 0;
int x, y;
srand(2844604396);
while (1) {
++count;
x = Irand(0, N-1);
if (x<0 || x>3) {
printf("count: %u, x: %u\n", count, x);
exit(0);
}
}
}
int Irand(int low, int high)
{
return low + (int)( (double)(high-low+1) * rand()/RAND_MAX );
}
when count = 109595656, the random number generator (which should only
return integers between 0 and 3) returns a 4.
clearly, my random number generator is faulty, but i can't figure out
why i should return a 4. and after 109595656 calls, this is a very
uncommon occurance!
does anyone know why this subroutine should return a 4 under any
circumstances?
can someone suggest a better subroutine to calculate an integer between
low and high?
btw, the seed is set to a particular value because i was tracking down a
problem. normally, my seed is obtained through a call to:
unsigned int SeedRandomGenerator(void)
{
unsigned int seed;
FILE *fp;
if( (fp = fopen("/dev/random", "r")) == NULL)
die("Can't open /dev/random for reading.");
fread(&seed, sizeof(unsigned int), 1, fp);
fclose(fp);
srand(seed);
return seed;
}
this is a show stopper for me. any help greatly appreciated!!
pete