From 116234d6c6e5cd7517cafd3ffa47fff92c6c3f42 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 11 Nov 2012 11:49:02 +0100 Subject: [PATCH] Restore old BOUND_EXACT logic in qsearch In case a PvNode node has a static evaluation above alpha but no available moves we want to flag the node as BOUND_EXACT, not as BOUND_UPPER as is currently. The behaviour was recently introduced with patch d471c49700fbe8281 of 3/10/2012 Spotted by Hongzhi Cheng. bench: 5558464 --- src/search.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 3ffd8ae4..55d815c4 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1101,10 +1101,14 @@ split_point_start: // At split points actual search starts from here const TTEntry* tte; Key posKey; Move ttMove, move, bestMove; - Value bestValue, value, ttValue, futilityValue, futilityBase; + Value bestValue, value, ttValue, futilityValue, futilityBase, oldAlpha; bool givesCheck, enoughMaterial, evasionPrunable, fromNull; Depth ttDepth; + // To flag BOUND_EXACT a node with eval above alpha and no available moves + if (PvNode) + oldAlpha = alpha; + ss->currentMove = bestMove = MOVE_NONE; ss->ply = (ss-1)->ply + 1; fromNull = (ss-1)->currentMove == MOVE_NULL; @@ -1291,7 +1295,7 @@ split_point_start: // At split points actual search starts from here return mated_in(ss->ply); // Plies to mate from the root TT.store(posKey, value_to_tt(bestValue, ss->ply), - PvNode && bestMove != MOVE_NONE ? BOUND_EXACT : BOUND_UPPER, + PvNode && bestValue > oldAlpha ? BOUND_EXACT : BOUND_UPPER, ttDepth, bestMove, ss->staticEval, ss->evalMargin); assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE); -- 2.39.2