Author: Uri Blass
Date: 16:32:22 05/30/04
Go up one level in this thread
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); > 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 I see that the problem is that I do not get them correctly when I type them to the screen and I get part of the number in one line and another part in another line. Writing every number in a seperate line means that the first numbers will not be in the screen because the screen has limited number of lines. I will probably need to write them into a file. 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.