I’m learning C and find rand() is very strange, maybe due to its randomness :p
I’ve the following code, it always output 1, is there any problem? How would you modify the code to make it do the job?
Cheers,
#include <stdlib.h>
double rand_double()
{
double ret = (double)rand();
return ret/(RAND_MAX+1);
}
int sample_geometric_rv(double p)
{
double q;
int n = 0;
do
{
q = rand_double();
n++;
} while (q >= p);
return n;
}
int main()
{
int ans = sample_geometric_rv(0.1);
printf("Output %d\n", ans);
return 0;
}
You need to seed the random number generator ONCE. Use
srand()with a different value everytime you want a different sequence.In the absence of a seeding, it is as if you had issued a
srand(1);Tipically, the RNG is seeded in
main()with the current time as initialization value. The current time as returned bytime()is almost guaranteed to be different in every run of the program (it changes once per second).Note that if you initialize the RNG with the same number, you get the same sequence. This can be interesting, for example, to repeat the data.
Note too that on different computers, the same initialization number does not need to generate the same numbers.