Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: boundschecking

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.