Author: Robert Hyatt
Date: 11:06:41 06/02/04
Go up one level in this thread
On June 01, 2004 at 10:45:13, Heiner Marxen wrote: >On May 30, 2004 at 18:35:57, Uri Blass wrote: > >>On May 30, 2004 at 18:20:15, Peter Fendrich wrote: >> >>>On May 30, 2004 at 18:09:49, Uri Blass wrote: >>> >>>>On May 30, 2004 at 17:51:13, Peter Fendrich wrote: >>>> >>>>>If zobrist is signed you will encounter problems when shifting it. >>>>>/Peter >>>> >>>>I think that my zobrist is unsigned. >>>> >>>> >>>>My function to generate "random" 64 bit numbers generate signed number but >>>>return it as unsigned number >>>> >>>>I have >>>>typedef unsigned __int64 BitBoard; >>>>static BitBoard rand64() >>>>{ >>>> __int64 r = rand(); >>>> r ^= (__int64)rand() << 15; >>>> r ^= (__int64)rand() << 30; >>>> r ^= (__int64)rand() << 45; >>>> r ^= (__int64)rand() << 60; >>>>return r; >>>>} >>>> >>>>BitBoard zobrist[6][2][64]; >>>> >>>>zobrist[fil][i][j]=rand64(); >>>> >>>>The problem is that when I do >>>> >>>>r1=(unsigned)zobrist[fil][i][j]&4294967295; >>>>r2=(unsigned)(zobrist[fil][i][j]>>32); >>>>r=r1 | (BitBoard) r2<<32; >>>> >>>>I get r!=zobrist[fil][i][j] >>>> >>>>Uri >>> >>> >>>What made me think you have a signed zobrist are the >>>rx=(unsigned)zobrist[fil][i][j].... statements. There is no reason to cast to >>>unsigned if it's already unsigned. >>>The statement: >>>r2=(unsigned)(zobrist[fil][i][j]>>32); >>>looks very strange to me because with parentheses you force the "(unsigned)" >>>cast to be made after the shift is done. It makes no sence to to me whether it's >>>signed or not. >>> >>>/Peter >> >>It seems that the problem is not the zobrist key but the fact that r1 and r2 >>were regular int >> >>I need to write the conversion to unsigned otherwise I get a warning of losing >>information in conversion from 'unsigned __int64' to 'unsigned int >> >>Now it seems that I needs different numbers. >> >>I used the following function to print 32 numbers into the screen and later >>copied them into the file. >> >>static BitBoard rand64() >>{ >> __int64 r = rand(); > ^^^^^^^ >> r ^= (__int64)rand() << 15; >> r ^= (__int64)rand() << 30; >> r ^= (__int64)rand() << 45; >> r ^= (__int64)rand() << 60; >> printf(" %u ",r); >> printf(" %u ",r>>32); > >You cannot print 64-bit numbers with "%u". "%u" needs an (unsigned int): > > printf(" %u %u ", (unsigned)r, (unsigned)(r>>32)), > >Cheers, >Heiner Even better, since this is MSVC anyway: %I64u will do just fine for 64 bit ints... In gcc %llu will do the trick... > > >> return r; >>} >> >>I think that I will print them into the screen not inside BitBoard rand64() but >>after I calculate the zob keys and I expect to get different numbers that I will >>be able to translate them to the zobrist keys. >> >>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.