Author: Dieter Buerssner
Date: 05:51:47 11/04/02
Go up one level in this thread
On November 04, 2002 at 08:44:51, Uri Blass wrote: >On November 04, 2002 at 08:28:10, Dieter Buerssner wrote: > >>On November 04, 2002 at 04:59:03, Uri Blass wrote: >> >>>If I use rand instead of rand64 I get 38 in both cases >>>Here is my function rand64 that is in another file in my project. >>> >>>__int64 rand64() >>>{ >>> return rand()^((__int64)rand()<<15)^((__int64)rand()<<30)^ >>> ((__int64)rand()<<45)^((__int64)rand()<<60); >>>} >> >>Without checking the C-Standard, this looks wrong to me. I think, it is not >>guaranteed, in which order rand() is called for producing the parts of the >>expression: >> >>__int64 rand64() >>{ >> __int64 r; >> r = rand(); >> r ^= rand() << 15; >> ...; >> return r; >>} >> >>I would use unsigned __int64. >> >>A portable an rather decent PRNG based on Maraglia: >> >>static unsigned long zseed = 0x12345678UL; >>static unsigned long wseed = 0x87654321UL; >> >>static 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); >>} >> >>static void seed_mwc1616(unsigned long s) >>{ >> zseed = s&0xffffffffUL; >> wseed = (s*1103515245UL + 12345)&0xffffffffUL; >>} >> >>mwc1616 (combine 2 16 bit multiply with carry generators) returns 32 bit random >>numbers. >> >>Regards, >>Dieter > >Sorry but I do not understand what is the advantage of unsigned and >what is "PRNG based on Maraglia" > >Uri
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.