Author: Robert Hyatt
Date: 10:49:41 01/13/00
Go up one level in this thread
On January 13, 2000 at 12:39:12, Stefan Meyer-Kahlen wrote: >On January 13, 2000 at 11:29:25, Thorsten Greiner wrote: > >>On January 13, 2000 at 11:22:20, Vincent Diepeveen wrote: >> >>>number = rand()%total; >> >>rand() is evil. It uses a linear congruency method like >> >> new random number = (old random number * constant + constant) % constant >> >>Information in low bits of 'old random number' is lost in this formula. Since >>the number of seconds since 1970 is pretty much constant in lets say January >>2000, the random numbers produced will be quite similar... >> >>Also, never use modulo on the results of rand() - use something like >> >> rand() / (RAND_MAX / total) >> >>since the low bits of rand() are not as random as the high bits. Or use a real >>random generator - here is a good one: http://www.agner.org/random >> >>Rgds >> -Thorsten > > >Thorsten is really an expert as far as random numbers are concerned. >I am using his random number generator in Shredder for a couple of years now, >before that I also had similiar problems with rand(). > >Stefan Anybody can grab the RNG in Crafty. It came from the Numerical Recipes book, which came from Knuth's book... Works well. But that does _not_ solve Vincent's problem. Any RNG will produce the same sequence of random numbers if it is re-initialized as Vincent is doing. And this is necessary otherwise we couldn't use these numbers to compute the hash signature to probe the opening book. He needs to re-seed the random number with something that is random itself, such as the millisecond part of the time of day. Or else use this time of day number to call the RNG repeatedly to skip a random number of random numbers. And since time of day in milliseconds is very random in the lower order bits, this solves it handily.
This page took 0.01 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.