From: Chris Caino Date: Mon, 14 Oct 2013 23:09:05 +0000 (+0100) Subject: Bug fix for KQKRPs endgame X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=2bf18bfc6396ae7292f57fc021b390fc05cd0f95;ds=sidebyside Bug fix for KQKRPs endgame This lost position 8/8/3q4/8/5k2/2P1R3/2K2P2/8 w - - 0 1 was previously evaluated as a draw. The king and rook need to be correctly placed with respect to the _same_ pawn. (Note also that the check for the pawn being on RANK_2 in the old version is redundant: it must be on RANK_2 if it hopes to protect a rook on RANK_3) Signed-off-by: Marco Costalba --- diff --git a/src/endgame.cpp b/src/endgame.cpp index b9ac17a2..5906b4d5 100644 --- a/src/endgame.cpp +++ b/src/endgame.cpp @@ -464,10 +464,10 @@ ScaleFactor Endgame::operator()(const Position& pos) const { if ( relative_rank(weakSide, kingSq) <= RANK_2 && relative_rank(weakSide, pos.king_square(strongSide)) >= RANK_4 - && (pos.pieces(weakSide, ROOK) & rank_bb(relative_rank(weakSide, RANK_3))) - && (pos.pieces(weakSide, PAWN) & rank_bb(relative_rank(weakSide, RANK_2))) - && (pos.attacks_from(kingSq) & pos.pieces(weakSide, PAWN)) - && (pos.attacks_from(rsq, strongSide) & pos.pieces(weakSide, PAWN))) + && relative_rank(weakSide, rsq) == RANK_3 + && ( pos.pieces(weakSide, PAWN) + & pos.attacks_from(kingSq) + & pos.attacks_from(rsq, strongSide))) return SCALE_FACTOR_DRAW; return SCALE_FACTOR_NONE;