# Computer Chess Club Archives

## Messages

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

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.

```