Author: Tord Romstad
Date: 07:49:05 12/25/03
Go up one level in this thread
On December 25, 2003 at 02:33:00, Russell Reagan wrote: >This is a question mainly directed at chess programmers. Why do some of you >store a chess move as a structure, and others of you store it as a packed int? >Crafty stores them as a packed int, while many others use a struct. > >An example of the packed int approach is: > >typedef int Move; >Move m = from_square | (to_square << 6) | (move_flags << 12); > >Pros: Handling of a move as a whole entity is fast (i.e. copying, sorting, etc.) >Cons: Accessing fields of a move and packing the move requires some overhead > >An example of the struct approach is: > >struct Move >{ > int from; > int to; > unsigned flags; >}; > >Move m; >m.from = from_square; >m.to = to_square; >m.flags = move_flags; > >Pros: Accessing fields and initializing the move requires less overhead >Cons: Moving these things around will be less efficient (copying, etc.) Another con is that you will probably still have to use the packed int representation when storing and retrieving moves from transposition table entries. If you use the struct approach, you will have to write small functions to convert moves between the two formats, and this obviously implies some overhead. I currently use the struct approach, but I have switched to the packed int approach in the new engine I am writing. The main reason is just that it seems slightly more convenient and less messy. I doubt that it will have any noticable effect on performance. Tord
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.