# Computer Chess Club Archives

## Messages

### Subject: Re: random book moves/ random generator

Author: Robert Hyatt

Date: 11:26:17 01/13/00

Go up one level in this thread

```On January 13, 2000 at 14:00:10, Christophe Theron wrote:

>On January 13, 2000 at 13:49:41, Robert Hyatt wrote:
>
>>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.
>
>
>Be careful with milliseconds on a PC running Windows 9x. Actually the PC timer
>has not changed since prehistory, and it is still producing interrupts at
>18.2Hz. That means that the resolution of time of day under Windows 9x is more
>than 50 milliseconds!

Right.  if you use gettimeofday() in most ANSI compilers, there is a variable
you can test to see what the resolution is.

>
>Under Windows NT I remember this is 10ms. Much better, but stil not accurate to
>the millisecond.
>

I don't really need ms accuracy... just something that changes frequently enough
to be considered random.  Even the seconds part of the timer is not bad...

>I hope this helps.
>
>
>    Christophe

```

This page took 0 seconds to execute

Last modified: Thu, 07 Jul 11 08:48:38 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.