if (thisThread->resetCalls.load(std::memory_order_relaxed))
{
thisThread->resetCalls = false;
- thisThread->callsCnt = 0;
+ // At low node count increase the checking rate to about 0.1% of nodes
+ // otherwise use a default value.
+ thisThread->callsCnt = Limits.nodes ? std::min((int64_t)4096, Limits.nodes / 1024)
+ : 4096;
}
- if (++thisThread->callsCnt > 4096)
+
+ if (--thisThread->callsCnt <= 0)
{
for (Thread* th : Threads)
th->resetCalls = true;
}
else if (depth < 7 * ONE_PLY && !extension)
{
- Value v = Value(-35 * depth / ONE_PLY * depth / ONE_PLY);
- if (ss->staticEval != VALUE_NONE)
- v += ss->staticEval - alpha - 200;
+ Value v = -Value(399 + 35 * depth / ONE_PLY * depth / ONE_PLY);
+
+ if (PvNode)
+ v += beta - alpha - 1;
if (!pos.see_ge(move, v))
continue;
// castling moves, because they are coded as "king captures rook" and
// hence break make_move().
else if ( type_of(move) == NORMAL
- && type_of(pos.piece_on(to_sq(move))) != PAWN
&& !pos.see_ge(make_move(to_sq(move), from_sq(move)), VALUE_ZERO))
r -= 2 * ONE_PLY;