]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Correctly set mateThreat in search()
[stockfish] / src / search.cpp
index 08e3a997c4d3c63365e24040e1803d298e8b3075..75b6bd0caefd42ebf5f4c2c7bced970b88d66074 100644 (file)
@@ -1080,7 +1080,7 @@ namespace {
       {
         // Try to reduce non-pv search depth by one ply if move seems not problematic,
         // if the move fails high will be re-searched at full depth.
-        if (    depth >= 2*OnePly
+        if (    depth >= 3*OnePly
             &&  moveCount >= LMRPVMoves
             && !dangerous
             && !moveIsCapture
@@ -1243,13 +1243,17 @@ namespace {
 
         StateInfo st;
         pos.do_null_move(st);
+        int R = (depth >= 5 * OnePly ? 4 : 3); // Null move dynamic reduction
 
-        Value nullValue = -search(pos, ss, -(beta-1), depth-4*OnePly, ply+1, false, threadID);
+        Value nullValue = -search(pos, ss, -(beta-1), depth-R*OnePly, ply+1, false, threadID);
 
         pos.undo_null_move();
 
         if (value_is_mate(nullValue))
         {
+            if (nullValue == value_mated_in(ply + 2))
+                mateThreat = true;
+
             /* Do not return unproven mates */
         }
         else if (nullValue >= beta)
@@ -1268,9 +1272,6 @@ namespace {
             // move which was reduced. If a connection is found, return a fail
             // low score (which will cause the reduced move to fail high in the
             // parent node, which will trigger a re-search with full depth).
-            if (nullValue == value_mated_in(ply + 2))
-                mateThreat = true;
-
             ss[ply].threatMove = ss[ply + 1].currentMove;
             if (   depth < ThreatDepth
                 && ss[ply - 1].reduction
@@ -1363,7 +1364,7 @@ namespace {
 
       // Try to reduce non-pv search depth by one ply if move seems not problematic,
       // if the move fails high will be re-searched at full depth.
-      if (    depth >= (ss[ply-1].currentMove == MOVE_NULL ? 3 : 2) * OnePly
+      if (    depth >= 3*OnePly
           &&  moveCount >= LMRNonPVMoves
           && !dangerous
           && !moveIsCapture