We all know that computer generated random numbers are not really random at all, but just pseudo-random. And I know that is a lot of discussion about how best to generate random numbers.
To be honest, I have not taken much notice of this in all the programming that I have done but today I found out that it is important.
Without going into the (boring) details, I have been generating a random number that is either 1 or 2 – but I generate quite a few very quickly.
For anybody that is interested the code is something like
r = rand() % n +1 [where n is the range you are interested in]
The problem is, I was returning the same number every time. Only very occasionally did I get the odd difference.
If I increased the range (say generating numbers between 1 and 20), this made no difference (I always got the same number).
However, if I put in a delay between each call to rand(), this “solved” the problem, but this is not a good solution.
Doing some reading around the subject, I think it is to do with the low/high order bits when generating the random numbers.
But that does not help me generate a decent distribution when making very frequent calls to rand().
I seem to recall that there is a C++ class called RNG (Random Number Generator) available and I am sure that Numerical Recipes in C will have something to say on the issue, but I need to look into these.