Author: Dieter Buerssner
Date: 12:02:02 10/28/03
Go up one level in this thread
On October 28, 2003 at 14:50:35, Martin Schreiber wrote: >For my hash tables I need 64 bit random numbers, but I don't know the source >code. >I use Dev-C++. Use a 32-bit pseudo random number generator, and paste 2 numbers together. For example a short one suggested by Marsaglia (it may be not the best, but most probably much better than most Std-C rand()): static unsigned long zseed = 0x12345678UL; static unsigned long wseed = 0x87654321UL; /* Combine 2 Multiply with carry PRNGs, returns 0 < r < 2**32 Should work correctly on any Standard-C platform independent of the width of type unsigned long */ unsigned long mwc1616(void) { unsigned long t = zseed; zseed=30903*(t&0xffff)+(t>>16); t = wseed; wseed=18000*(t&0xffff)+(t>>16); return ((wseed<<16)&0xffffffffUL) + (zseed&0xffff); } /* Paste together 2 numbers to get a 64 bit random number */ my_u64bit_t r64(void) { my_u64bit_t r; r = mwc1616(); return (r<<32) | mwc1616(); } To "seed" the above PRNG, change wseed and/or zseed. They should not be both zero. You cold also paste together Standard rand() returns - but I would not suggest to do it (also not without traps, to do it rigth). Regards, Dieter
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.