Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: To Experienced Java Programmers: strange BUG!!

Author: Mridul Muralidharan

Date: 06:44:29 05/06/04

Go up one level in this thread


On May 06, 2004 at 09:41:58, Mridul Muralidharan wrote:

>On May 06, 2004 at 08:32:40, Bernd Nürnberger wrote:
>
>>On May 06, 2004 at 07:58:12, Renze Steenhuisen wrote:
>>
>>>On May 06, 2004 at 07:07:57, Bernd Nürnberger wrote:
>>>
>>>>Hello,
>>>>
>>>>I have a really strange bug in my move generator, but in the meantime,
>>>>after thourough debugging, I am more and more convinced, that it is not
>>>>a bug in my programming but a bug in Java itself or in the OS/Hardware
>>>>(but I am still hoping, I made a mistake somewhere ...).
>>>>
>>>>I have a iBook 300, Mac OS 9.x, and the latest Java for Mac OS 9.x (I think
>>>>its MRJ SDK 2.2.4 or so).
>>>>
>>>>HERE COMES THE PROBLEM:
>>>>
>>>>Some 64 bit long values behave really strange: the upper part (the 32 MSBs)
>>>>are trashed from time to time (lower 32 bits are OK, upper 32 bits seem
>>>>more or less random). I looked through the code again and again, so that
>>>>all literals have a "L" appended, and all literals seems ok now.
>>>>
>>>>Could it be, that some operators in Java on long values are not properly
>>>>implemented and make errors on certain circumstances? Maybe a set upper
>>>>bit (64th bit, sign bit) causes problems in some cases?
>>>>
>>>>I would be really glad to hear your thoughts are even solutions to this
>>>>kind of problem.
>>>>
>>>>Many many thanks in advance for your answers!
>>>>
>>>>Best wishes,
>>>>
>>>>Bernd
>>>
>>>
>>>Hi Bernd,
>>>
>>>could you give me some code to work with that causes the problem already?
>>>
>>>Cheers!
>>>
>>> Renze
>>
>>An example:
>>
>>The variables are declared int/long as appropriate; it's straight forward
>>implementation as in many other bitboard based programs; hope just a
>>snippet helps, because the whole relevant code maybe would be some
>>thousand lines %-/
>>
>>--- snip ---
>>
>>      ...
>>      blackLegalMoves = board.whitePieces;   // captures
>>
>>      ...
>>      // k -- black king
>>      /////////////////////
>>
>>      // o  normal moves and captures
>>      from = board.blackKing;
>>       //    (*)
>>      mvboard = KING_MOVES[from] & blackLegalMoves;
>>      halfply = from | Move.BPC_KING;
>>      while (mvboard != 0L) {
>>        to = Bitboard.last(mvboard);
>>        mvboard &= Bitboard.CLEAR_MASK[to];
>>        moves[mvidx++] = halfply | to << Move.TO | piece[to] << Move.CAPTY;
>>      }
>>
>>--- snap ---
>>
>>if I insert System.out.println(blackLegalMoves); at point (*) and similiar
>>points in the code, the error is not present -- even more strange!?!
>>
>>what can here go wrong with longs? code for other piece types is
>>similiar...
>>
>>Greetings,
>>           Bernd
>
>Java does not support 'unsigned'.
>So I doubt if this code will work transparently unless you pay very careful
>attention and not do any arithematic operations on the longs.
>
>Mridul

As an example :
bitbA >> 4 is not he same as an unsigned long long right shift : since if the
number is an negetive , the shift will fill in the 4 MSB bits with 1.

Mridul



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.