Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: boundschecking

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.