if (rootDepth >= 4)
{
Value prev = rootMoves[pvIdx].previousScore;
- delta = Value(17);
+ delta = Value(17) + int(prev) * prev / 16384;
alpha = std::max(prev - delta,-VALUE_INFINITE);
beta = std::min(prev + delta, VALUE_INFINITE);
// cases where we extend a son if it has good chances to be "interesting".
if ( depth >= 3
&& moveCount > 1 + 2 * rootNode
- && ( !captureOrPromotion
- || (cutNode && (ss-1)->moveCount > 1)
- || !ss->ttPv)
- && (!PvNode || ss->ply > 1 || thisThread->id() % 4 != 3))
+ && ( !ss->ttPv
+ || !captureOrPromotion
+ || (cutNode && (ss-1)->moveCount > 1)))
{
Depth r = reduction(improving, depth, moveCount, rangeReduction > 2);
// In general we want to cap the LMR depth search at newDepth. But if reductions
// are really negative and movecount is low, we allow this move to be searched
// deeper than the first move (this may lead to hidden double extensions).
- int deeper = r >= -1 ? 0
- : moveCount <= 3 ? 2
- : moveCount <= 5 ? 1
- : PvNode && depth > 6 ? 1
- : 0;
+ int deeper = r >= -1 ? 0
+ : moveCount <= 5 ? 2
+ : PvNode && depth > 6 ? 1
+ : cutNode && moveCount <= 7 ? 1
+ : 0;
Depth d = std::clamp(newDepth - r, 1, newDepth + deeper);