If singular extension fails to trigger extension then don't consider check extension.
STC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 69428 W: 12663 L: 12271 D: 44494
LTC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 44023 W: 5875 L: 5612 D: 32536
Bench:
6170444
Closes #1043
moveCountPruning = depth < 16 * ONE_PLY
&& moveCount >= FutilityMoveCounts[improving][depth / ONE_PLY];
moveCountPruning = depth < 16 * ONE_PLY
&& moveCount >= FutilityMoveCounts[improving][depth / ONE_PLY];
- // Step 12. Extensions
- // Extend checks
- if ( givesCheck
- && !moveCountPruning
- && pos.see_ge(move, VALUE_ZERO))
- extension = ONE_PLY;
+ // Step 12. Singular and Gives Check Extensions
// Singular extension search. If all moves but one fail low on a search of
// (alpha-s, beta-s), and just one fails high on (alpha, beta), then that move
// Singular extension search. If all moves but one fail low on a search of
// (alpha-s, beta-s), and just one fails high on (alpha, beta), then that move
// ttValue minus a margin then we extend the ttMove.
if ( singularExtensionNode
&& move == ttMove
// ttValue minus a margin then we extend the ttMove.
if ( singularExtensionNode
&& move == ttMove
&& pos.legal(move))
{
Value rBeta = std::max(ttValue - 2 * depth / ONE_PLY, -VALUE_MATE);
&& pos.legal(move))
{
Value rBeta = std::max(ttValue - 2 * depth / ONE_PLY, -VALUE_MATE);
if (value < rBeta)
extension = ONE_PLY;
}
if (value < rBeta)
extension = ONE_PLY;
}
+ else if ( givesCheck
+ && !moveCountPruning
+ && pos.see_ge(move, VALUE_ZERO))
+ extension = ONE_PLY;
// Calculate new depth for this move
newDepth = depth - ONE_PLY + extension;
// Calculate new depth for this move
newDepth = depth - ONE_PLY + extension;