Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Crafty null move question

Author: Steffen Jakob

Date: 23:14:47 07/19/02

Go up one level in this thread


On July 19, 2002 at 21:07:18, Robert Hyatt wrote:

>On July 19, 2002 at 00:19:12, Steffen Jakob wrote:
>
>>On July 18, 2002 at 17:48:50, Robert Hyatt wrote:
>>
>>// ...
>>
>>>>>>>>or in C-world code
>>>>>>>>#define getFile(s) ((s)&7)
>>>>>>>>#define getRank(s) ((s)>>3)
>>>>>>>>
>>>>>>>>Greetings,
>>>>>>>>Steffen.
>>>>>>>
>>>>>>>
>>>>>>>I already do this.  I have "Rank()" and "File()" macros that I use most
>>>>>>>everywhere already.  Ditto for "From()", "To()", "Piece()", "Captured()" to
>>>>>>>extract that field from the 21 bit compressed move format I use internally.
>>>>>>
>>>>>><nitpicking>
>>>>>>crafty> egrep '&7\)|>>3\)' *.[ch] | grep -v '#define' | wc --lines
>>>>>>     23
>>>>>></nitpicking>
>>>>>>
>>>>>>Best wishes,
>>>>>>Steffen.
>>>>>
>>>>>
>>>>>your egrep is NFG.  If you look, many of those are in init.c and in the
>>>>>chess.h file where the File() is actually defined using that pattern.  :)
>>>>
>>>>What's so special about init.c? I use my encapsulating code in class
>>>>constructors as well ;-) BTW: the definitions of the macros are excluded by the
>>>>2nd grep call with the -v option above.
>>>>
>>>>Greetings,
>>>>Steffen.
>>>
>>>Note your grep -v only works on #defines where it fits on one line.  Hint:  mine
>>>often go to 2=3=4 lines which breaks that.  Also, not all &7 has anything
>>
>>No, I checked before I wrote the grep statement that this isnt the case for your
>>rank/file macros definitions.
>
>You missed some.  At least in my version and I don't recall any changes.
>The various attack functions in chess.h had &7 and >>3 in a few places

This is why I prefer

>where they do the rotated attack lookups and need the rank or file number
>for an index.  IE here for one:
>
>#  define AttacksFile(a)                                                  \
>      rook_attacks_rl90[(a)][(tree->pos.occupied_rl90>>                   \
>                             (56-(((a)&7)<<3)))&255]

Note that you use the File() macro instead of &7 in the COMPACT_ATTACKS #if
branch! :)

>>to do
>>>with the file number.  For example my transposition age field is 3 bits and
>>
>>Run my command without the piped "wc". I dont think that the age field is
>>involved. Actually I couldnt find something with "age" and "7" in your code.
>>
>
>In iterate.c:
>
>    transposition_id=(transposition_id+1)&7;

I see... this statement doesnt have a closing bracket after the "&7".

>>I
>>>use the &7 to truncate the age... as in age = (age+1) & 7; which tricks your
>>>grep into thinking that I used that file mask again.  :)
>>
>>>In any case, I have fixed all that are legitimate rank and file accesses to
>>>use the correct mask.
>>
>>Cool :)
>>
>>Please also note that my grep command doesnt find all occurences of the
>>"&7"-stuff (sometimes there is a space between & and 7).
>>
>>E.g.:
>>output.c:    *text++=(From(move) & 7)+'a';
>>output.c:    *text++=(To(move) & 7)+'a';
>>output.c:  *text++=(From(move) & 7)+'a';
>>output.c:  *text++=(To(move) & 7)+'a';
>>
>>I hope all this doesnt sound too nitpicking. :)
>>
>
>Nope, suggestions _always_ welcome. :)
>
>
>>>By the way, another error is that I do have some >>32 operations which breaks
>>>your >>3 string match too.  :)
>>
>>No, it doesnt because I wrote >>3\). Note the closing bracket! :-)
>
>You are correct.  I "parsed out" the \ when reading it. :)

Greetings,
Steffen.



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.