]> git.sesse.net Git - stockfish/commitdiff
Minor improvement in eval of unstoppable pawns promoting one ply apart.
authorTord Romstad <tord@glaurungchess.com>
Thu, 15 Oct 2009 10:39:55 +0000 (12:39 +0200)
committerTord Romstad <tord@glaurungchess.com>
Thu, 15 Oct 2009 10:39:55 +0000 (12:39 +0200)
Marco's new code for evaluating two unstoppable passed pawns where
one pawn promotes a single ply before the other tried to detect
cases where the pawn that promotes first could immediately capture
the pawn that promotes a ply later, but didn't work in cases where
the two pawns are on the same file. An example of this is the
following position:

8/8/3K4/2P5/2p5/3k4/8/8 w - -

With the new code, such positions are handled correctly.

src/evaluate.cpp

index a03f7ddb7a5d3cda8956a73c6b001099efe77985..104a0a6bed5b3ab54018c68bcc641fdfe81e1cbe 100644 (file)
@@ -1069,7 +1069,10 @@ namespace {
             Square winnerQSq = relative_square(winnerSide, make_square(square_file(pawnToGo[winnerSide]), RANK_8));
             Square loserQSq = relative_square(loserSide, make_square(square_file(pawnToGo[loserSide]), RANK_8));
 
-            Bitboard b = pos.attacks_from<QUEEN>(winnerQSq);
+            Bitboard b = pos.occupied_squares();
+            clear_bit(&b, pawnToGo[winnerSide]);
+            clear_bit(&b, pawnToGo[loserSide]);
+            b = queen_attacks_bb(winnerQSq, b);
 
             if (  (b & pos.pieces(KING, loserSide))
                 ||(bit_is_set(b, loserQSq) && !bit_is_set(ei.attacked_by(loserSide), loserQSq)))