Fix a minor bug in search
authorMarco Costalba <mcostalba@gmail.com>
Thu, 11 Oct 2012 19:11:11 +0000 (21:11 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 11 Oct 2012 19:12:43 +0000 (21:12 +0200)
As Joona says: "The problem is that when doing full
window search (-VALUE_INFINITE, VALUE_INFINITE), and
pruning all the moves will return fail low which is
mate score, because only clause touching alpha is
"mate distance pruning". So we are returning mate score
although we are just pruning all the moves. In reality
there probably is no mate in sight.

Bug spotted and fixed by Joona.

src/search.cpp

index 4139ef96b707afa81baec5e5d19a7fbf2d7a28c9..cf98ca35af3878dbfd5043da2446970236c1157f 100644 (file)
@@ -826,7 +826,8 @@ split_point_start: // At split points actual search starts from here
           && !inCheck
           && !dangerous
           &&  move != ttMove
-          && (bestValue > VALUE_MATED_IN_MAX_PLY || bestValue == -VALUE_INFINITE))
+          && (bestValue > VALUE_MATED_IN_MAX_PLY || (   bestValue == -VALUE_INFINITE
+                                                     && alpha > VALUE_MATED_IN_MAX_PLY)))
       {
           // Move count based pruning
           if (   depth < 16 * ONE_PLY