Author: Zappa
Date: 10:06:01 12/06/05
Go up one level in this thread
On December 06, 2005 at 12:43:24, Mathieu Pagé wrote: >On December 05, 2005 at 23:24:52, Zappa wrote: > >>I am getting really, really tired of coding all my evaluation twice (once for >>white and once for black). However, one of the things that is keeping me from >>switching to a for(i < 2) loop is that I can't do a shift! >> >>For example, if I have some pattern based on (pawns << 8) for white, than that >>is (pawns >> 8) for black, and you can't do a negative shift in IA32. > >Hi, > >I never tested the idea i'm about to propose, I just thought of it while reading >your post, but it seem to make sense for me. This require that you code in C++, >I don't know if it's the case. > >In every cases i'd like to have somes opinions from you guys. > >here is a sample function : > >template <int color> >void eval() >{ > // do some stuff > > if (color == white) > { > result = pawns >> 8; > } > else > { > result = pawns << 8; > } > > // do some stuff with result > > return; >} > >Then you can cal your evaluation function like this > >if (colorToMove == white) >{ > x = eval<WHITE>(); >} >else >{ > x = eval<BLACK>(); >} > >This way you can write only one evaluation function with IFs where the code is >different for the whites and blacks, but since the color is passed as a template >parameter, the conditional jump are resolved at the link time (resulting in two >function being compiled) causing no overhead. > >What do you think of this idea ? > >Mathieu Yes, but I have to write it twice :) That is my problem. anthony
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.