Author: Robert Hyatt
Date: 08:13:32 10/30/03
Go up one level in this thread
On October 29, 2003 at 11:31:18, martin fierz wrote: >On October 29, 2003 at 09:32:37, Gerd Isenberg wrote: > >>On October 29, 2003 at 07:00:56, martin fierz wrote: >> >>>On October 28, 2003 at 15:01:40, Gerd Isenberg wrote: >>> >>>>On October 28, 2003 at 14:50:35, Martin Schreiber wrote: >>>> >>>>>Hi, >>>>> >>>>>For my hash tables I need 64 bit random numbers, but I don't know the source >>>>>code. >>>>>I use Dev-C++. >>>>>Can anybody help me? >>>>> >>>>>Martin >>>> >>>>This simple one works quite well >>>> >>>>UINT32 HashRand32() >>>>{ >>>> static UINT32 r = 0; >>>> return (r = 1664525L*r + 1013904223L); >>>>} >>>> >>>>... >>>>hashval = HashRand32(); >>>>hashval = (hashval << 32) | HashRand32(); >>> >>>i use a similar concatenation of random numbers generated with the C rand() >>>function. >>> >>>i have never believed all the stuff about "bad" or "good" random numbers for >>>hashing purposes (of course, for other things it's different...). i also don't >>>believe this "hamming distance" stuff. i'd be very surprised if any of this made >>>any difference in practice. has anybody ever tested this? >>> >>>cheers >>> martin >> >> >>Hi Martin, >> >>i'm not an expert in pseudo random number generators. >>I never tried C-rand() so far, because it may vary from system to system and i >>want deterministic numbers independent from compiler or os. I looked for min and >>average hamming distance, but i have no idea whether a min hamming distance of >>let say 16 does necessarily imply higher collision rate as 30. >>I store the whole 64 bit signature inside my hash structure - and even look for >>validity of the stored move. >> >>Cheers, >>Gerd > >hi gerd, > >there was once a discussion about hamming distance and good random numbers, and >IIRC there was also a "good" function for getting one's random numbers. i >compared that with mine, which was supposed to be "bad" and couldn't find any >difference in practice... that's why i don't believe this stuff any more! > >cheers > martin The main point is to use a known RNG, if you use different machines. IE I originally grabbed my RNG to include in Cray Blitz, so that I could make a book that would work, even if the Cray compiler/library guys changed their RNG code (which they did from time to time). It was also useful in that it allowed me to run on my vax and compare node counts to the Cray, without having minor differences caused by different hash signatures producing different overwrite/reuse results. you only need 768 64 bit numbers for the 12 possible square contents times the 64 possible squares. Plus maybe a few more for castling and en passant, depending on how you handle those. Any RNG will most likely produce 1500 values that are random and uniform. There are many RNGs that have short periods of course, but not a period of 1500 or less. That's all we need, and I agree that most of this hyperbole about randomness, and hamming distance is not so important, although RNGs with a hamming distance of zero ought to be avoided. :)
This page took 0 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.