Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bizar Question for programmers: very strange behaviour of my engine

Author: Robert Hyatt

Date: 11:59:15 01/17/06

Go up one level in this thread


On January 17, 2006 at 12:52:40, James Swafford wrote:

>On January 17, 2006 at 12:29:21, JW de Kort wrote:
>
>>Thank you for your reply. I check the boundries of the array's but that seems to
>>be correct.
>>
>>Could you please clarify your response because i'am not 100% sure what you mean.
>>
>
>I'll try.  Let me preface this with this caveat: I doubt this is
>your problem. :)  Dann's advice is pretty sound.
>
>Let's say you are evaluating a bitwise expression "a & b".
>If a == 0, then ( a & b ) == 0 for any b.  So, it's not
>necessary for the compiler to go to the trouble of figuring
>out what b is.
>
>In your case, a & b represent items in an array.  What is
>really evaluated is probably implementation specific
>(depends on the compiler), but it wouldn't even need to fetch
>the item from the second array to do the bitwise comparison
>if your first item (a) is 0.  So, possibly you are skirting a
>boundary bug when i==1 since your "a" is always 0.
>
>Again, I doubt that's the case in your program, but it's
>a possiblity.
>
>--
>James
>

I don't see how that would cause a problem, since it has to fetch both values,
and then AND them to produce the final zero/non-zero result for testing.  This
isn't the same as

if (a && b) where if a is 0, b would not even be fetched usually...

>
>
>>
>>On January 17, 2006 at 11:54:29, James Swafford wrote:
>>
>>>On January 17, 2006 at 11:27:35, James Swafford wrote:
>>>
>>>>On January 16, 2006 at 16:22:10, Dann Corbit wrote:
>>>>
>>>>>On January 16, 2006 at 16:16:13, JW de Kort wrote:
>>>>>
>>>>>>Hi all,
>>>>>>
>>>>>>In my engine i want to use the following line:
>>>>>
>>>>>#include <assert.h>
>>>>>...
>>>>>
>>>>>     assert(kol+1 < sizeof bfZwart / sizeof bfZwart[0]);
>>>>>>    !(bfZwart[kol+1]&bfBoven[rij])
>>>>
>>>>That's probably it, but another (less likely) possibility is that
>>>>the short-circuit evaluation is not attempting fetch the value from
>>>>the bfBoven[] array unless kol+1 > 1 (making bfZwart[kol+1] true).
>>>>
>>>>In other words, is it the case that bfZwart[kol+1] always evaluates
>>>>to false?  If so, I doubt the second part of the expression is even
>>>>evaluated.  Like I said, not likely, but weird things happen.
>>>>
>>>
>>>By false/true I should say 'non-zero/zero', since we are dealing
>>>with a bitwise operator.
>>>
>>>
>>>
>>>>--
>>>>James
>>>>
>>>>
>>>>>>
>>>>>>In only a few cases this lines crashes my engine. If i change the +1 to any
>>>>>>other value there is no problem!
>>>>>>
>>>>>>Does anybody know were i have to look for to solve this problem? I do not
>>>>>>understand how a comparison like the above can cause a program to crash.
>>>>>>
>>>>>>regards
>>>>>>Jan Willem



This page took 0.01 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.