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 9ae28d3c55870b554a5681782442dbbc3569b3c3..4717a4d591d7ecfe8b32737b780b31b54510d42d 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