Fix KBPK bug
authorChris Caino <chriscaino@gmail.com>
Sat, 24 Aug 2013 08:05:48 +0000 (10:05 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 24 Aug 2013 08:08:03 +0000 (10:08 +0200)
With

position fen 7k/8/8/8/8/7P/6K1/7B w - - 0 1
go depth 25

The evaluation at depth 22 is not draw as it should be. The reason is that
when search reaches the position 8/6kP/8/8/8/3B4/6K1/8 w - - 0 1 if white plays
h8R or h8N then we get a position that is a "KNOWN_WIN" and is _not_ a check, so
futility pruning in qsearch kicks in and black may think that it is "futile"
to reply Kxh8 since, according to the logic of the code, it cannot raise the score
back towards a draw.

bench: 4728533

src/search.cpp

index 9ae28d3..4717a4d 100644 (file)
@@ -1230,6 +1230,7 @@ moves_loop: // When in check and at SpNode search starts from here
           && !givesCheck
           &&  move != ttMove
           &&  type_of(move) != PROMOTION
+          &&  futilityBase > -VALUE_KNOWN_WIN
           && !pos.is_passed_pawn_push(move))
       {
           futilityValue =  futilityBase