Correct qsearch() TT save
authorJoona Kiiski <joona.kiiski@gmail.com>
Fri, 29 Jan 2010 08:13:21 +0000 (10:13 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 29 Jan 2010 10:03:06 +0000 (11:03 +0100)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp

index 378c3d20f1f693d48ec2df4eba1a5ed68f6fc06e..16847b3d830733873c23d1d2207f68648570a00e 100644 (file)
@@ -1805,6 +1805,7 @@ namespace {
     const TTEntry* tte = NULL;
     int moveCount = 0;
     bool pvNode = (beta - alpha != 1);
+    Value oldAlpha = alpha;
 
     // Initialize, and make an early exit in case of an aborted search,
     // an instant draw, maximum ply reached, etc.
@@ -1948,14 +1949,14 @@ namespace {
 
     // Update transposition table
     Depth d = (depth == Depth(0) ? Depth(0) : Depth(-1));
-    if (bestValue < beta)
+    if (bestValue <= oldAlpha)
     {
         // If bestValue isn't changed it means it is still the static evaluation
         // of the node, so keep this info to avoid a future evaluation() call.
         ValueType type = (bestValue == staticValue && !ei.futilityMargin ? VALUE_TYPE_EV_UP : VALUE_TYPE_UPPER);
         TT.store(pos.get_key(), value_to_tt(bestValue, ply), type, d, MOVE_NONE);
     }
-    else
+    else if (bestValue >= beta)
     {
         move = ss[ply].pv[ply];
         TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, d, move);
@@ -1964,6 +1965,8 @@ namespace {
         if (!pos.move_is_capture_or_promotion(move))
             update_killers(move, ss[ply]);
     }
+    else
+        TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_EXACT, d, ss[ply].pv[ply]);
 
     assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);