// re-search, otherwise exit the loop.
if (bestValue <= alpha)
{
+ beta = (alpha + beta) / 2;
alpha = std::max(bestValue - delta, -VALUE_INFINITE);
Signals.failedLowAtRoot = true;
Signals.stopOnPonderhit = false;
}
else if (bestValue >= beta)
+ {
+ alpha = (alpha + beta) / 2;
beta = std::min(bestValue + delta, VALUE_INFINITE);
+ }
else
break;
- delta += 3 * delta / 8;
+ delta += delta / 2;
assert(alpha >= -VALUE_INFINITE && beta <= VALUE_INFINITE);
}
&& !captureOrPromotion
&& !inCheck
&& !dangerous
- /* && move != ttMove Already implicit in the next condition */
&& bestValue > VALUE_MATED_IN_MAX_PLY)
{
// Move count based pruning
// Step 15. Reduced depth search (LMR). If the move fails high it will be
// re-searched at full depth.
if ( depth >= 3 * ONE_PLY
- && !pvMove
+ && moveCount > 1
&& !captureOrPromotion
- && move != ttMove
&& move != ss->killers[0]
&& move != ss->killers[1])
{
if ( !PvNode
&& !InCheck
&& !givesCheck
- && move != ttMove
&& futilityBase > -VALUE_KNOWN_WIN
&& !pos.advanced_pawn_push(move))
{
// Don't search moves with negative SEE values
if ( !PvNode
&& (!InCheck || evasionPrunable)
- && move != ttMove
&& type_of(move) != PROMOTION
&& pos.see_sign(move) < VALUE_ZERO)
continue;
{
Threads.mutex.lock();
- int nodes = RootPos.nodes_searched();
+ int64_t nodes = RootPos.nodes_searched();
// Loop across all split points and sum accumulated SplitPoint nodes plus
// all the currently active positions nodes.