In qsearch update TT only if returning from stand pat
authorMarco Costalba <mcostalba@gmail.com>
Tue, 24 Mar 2009 10:26:43 +0000 (11:26 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 24 Mar 2009 10:26:43 +0000 (11:26 +0100)
This is the only "correct" exact value we can store.

Otherwise there could be spurious failed high/low nodes.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp

index 72530f2..c4446fc 100644 (file)
@@ -1450,7 +1450,11 @@ namespace {
     Value bestValue = staticValue;
 
     if (bestValue >= beta)
+    {
+        // Update transposition table before to leave
+        TT.store(pos, value_to_tt(bestValue, ply), depth, MOVE_NONE, VALUE_TYPE_EXACT);
         return bestValue;
+    }
 
     if (bestValue > alpha)
         alpha = bestValue;
@@ -1534,9 +1538,6 @@ namespace {
 
     assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);
 
-    // Update transposition table
-    TT.store(pos, value_to_tt(bestValue, ply), depth, MOVE_NONE, VALUE_TYPE_EXACT);
-
     // Update killers only for good check moves
     Move m = ss[ply].currentMove;
     if (alpha >= beta && ok_to_history(pos, m)) // Only non capture moves are considered