From 9eccba776198c210563666787a9b5fe44b386fdc Mon Sep 17 00:00:00 2001 From: Aram Tumanian Date: Mon, 21 Nov 2016 17:17:47 +0200 Subject: [PATCH] Fix the pawn hash failure when the pawn key is 0 This patch fixed bugs #859 and #882. At initialization we generate a new random key (Zobrist::noPawns). It's added to the pawn key of all positions, so that the pawn key of a pawnless position is no longer 0. STC: LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 21307 W: 3738 L: 3618 D: 13951 LTC: LLR: 2.94 (-2.94,2.94) [-3.00,1.00] Total: 45270 W: 5737 L: 5648 D: 33885 No functional change. --- src/position.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index fd518488..7c5ffdc5 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -45,7 +45,7 @@ namespace Zobrist { Key psq[PIECE_NB][SQUARE_NB]; Key enpassant[FILE_NB]; Key castling[CASTLING_RIGHT_NB]; - Key side; + Key side, noPawns; } namespace { @@ -145,6 +145,7 @@ void Position::init() { } Zobrist::side = rng.rand(); + Zobrist::noPawns = rng.rand(); } @@ -331,7 +332,8 @@ void Position::set_check_info(StateInfo* si) const { void Position::set_state(StateInfo* si) const { - si->key = si->pawnKey = si->materialKey = 0; + si->key = si->materialKey = 0; + si->pawnKey = Zobrist::noPawns; si->nonPawnMaterial[WHITE] = si->nonPawnMaterial[BLACK] = VALUE_ZERO; si->psq = SCORE_ZERO; si->checkersBB = attackers_to(square(sideToMove)) & pieces(~sideToMove); -- 2.39.2