I hunted the source of that problem: using a tt score as an eval inside the search instead of the static evaluation.
I got that idea from (many) other chess engines.
This eval is then used for the logic of razoring, reversed futility pruning, nullmove pruning.
Something like this:
Code: Select all
// use tt score as a better eval.
if (ttHit
&& (ttEntry.bound == EXACT
|| (ttEntry.bound == LOWER_BOUND && ttData.score >= stack->eval)
|| (ttEntry.bound == UPPER_BOUND && ttData.score <= stack->eval)))
stack->eval = ttEntry.score;
Any wizard around here who knows why, what and how to solve this?
(I saw 1 or 2 engines during my play-tests having the same bug).
