Author: Robert Hyatt
Date: 08:53:01 09/10/03
Go up one level in this thread
On September 10, 2003 at 11:49:41, Robert Hyatt wrote:
>On September 10, 2003 at 08:45:22, Uri Blass wrote:
>
>>I found that my program printed the numbers 0 and 1 when it did the following
>>code without printing mistake or mistake1.
>>
>>zobpawnkey[hply]=zobpawn;
>>if (nodes==663719)
>>{
>> if (zobpawnkey[hply]!=zobpawn)
>> printf("mistake");
>> if ((zobpawnkey[hply]&1)!=(zobpawn&1))
>> printf("mistake1");
>> printf(" %d %d ",(zobpawn&1),(zobpawnkey[hply]&1));
>>}
>>
>>both zobpawn and zobpawnkey[hply] are __int 64 varaibles.
>>
>>How is it possible?
>
>You forgot the \n for one thing. This means that the C library will buffer
>up one or the other (or both) of the above, but without the \n, the buffer
>won't be printed until you eventually output a \n character...
>
>However, they should be printed sooner or later.
>
>What if zobpawnkey[hply] = 1
>and zobpawn = 1
>
>The first if is false (they are equal, not not-equal) so you don't get
>mistake. Then when you and both with 1, you get 1, and the second if is also
>false so you don't get mistake1 either.
>
>Either problem will do the trick.
[I somehow hit submit trying to back up to the %d line to comment on it
as well, so here goes in a second post]
%d is bad. You are going to pass a 64 bit int to the C runtime library,
and it is going to be expecting a 32 bit value instead. That print never
has a chance of doing the right thing. I don't remember the MSVC 64 bit
format, but gcc likes %llu or %lld.
>
>>I guess that I cannot trust & of 64 bit varaible with number unless I do some
>>casting like (int)(zobpawn&1) but I thought that at least I can
>>expect program to give the same value when it calculate the same thing even if
>>the calculation is wrong.
>>
>>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.