return Value((175 - 50 * improving) * d / ONE_PLY);
}
+ // Margin for pruning capturing moves: almost linear in depth
+ constexpr int CapturePruneMargin[] = { 0,
+ 1 * PawnValueEg * 1055 / 1000,
+ 2 * PawnValueEg * 1042 / 1000,
+ 3 * PawnValueEg * 963 / 1000,
+ 4 * PawnValueEg * 1038 / 1000,
+ 5 * PawnValueEg * 950 / 1000,
+ 6 * PawnValueEg * 930 / 1000
+ };
+
// Futility and reductions lookup tables, initialized at startup
int FutilityMoveCounts[2][16]; // [improving][depth]
int Reductions[2][2][64][64]; // [pv][improving][depth][moveNumber]
}
else if ( depth < 7 * ONE_PLY
&& !extension
- && !pos.see_ge(move, -PawnValueEg * (depth / ONE_PLY)))
+ && !pos.see_ge(move, -Value(CapturePruneMargin[depth / ONE_PLY])))
continue;
}