Author: Uri Blass
Date: 05:44:51 11/04/02
Go up one level in this thread
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.