I’m having a strange problem here, and I can’t manage to find a good explanation to it, so I thought of asking you guys :
Consider the following method :
int MathUtility::randomize(int Min, int Max)
{
qsrand(QTime::currentTime().msec());
if (Min > Max)
{
int Temp = Min;
Min = Max;
Max = Temp;
}
return ((rand()%(Max-Min+1))+Min);
}
I won’t explain you gurus what this method actually does, I’ll instead explain my problem :
I realised that when I call this method in a loop, sometimes, I get the same random number over and over again… For example, this snippet…
for(int i=0; i<10; ++i)
{
int Index = MathUtility::randomize(0, 1000);
qDebug() << Index;
}
…will produce something like :
567
567
567
567…etc…
I realised too, that if I don’t call qsrand everytime, but only once during my application’s lifetime, it’s working perfectly…
My question : Why ?
Because if you call
randomizemore than once in a millisecond (which is rather likely at current CPU clock speeds), you are seeding the RNG with the same value. This is guaranteed to produce the same output from the RNG.Random-number generators are only meant to be seeded once. Seeding them multiple times does not make the output extra random, and in fact (as you found) may make it much less random.