// Futility and reductions lookup tables, initialized at startup
int FutilityMoveCounts[2][16]; // [improving][depth]
- int Reductions[2][2][64][64]; // [pv][improving][depth][moveNumber]
+ int Reductions[2][64][64]; // [improving][depth][moveNumber]
template <bool PvNode> Depth reduction(bool i, Depth d, int mn) {
- return Reductions[PvNode][i][std::min(d / ONE_PLY, 63)][std::min(mn, 63)] * ONE_PLY;
+ return (Reductions[i][std::min(d / ONE_PLY, 63)][std::min(mn, 63)] - PvNode) * ONE_PLY;
}
// History and stats update bonus, based on depth
{
double r = log(d) * log(mc) / 1.95;
- Reductions[NonPV][imp][d][mc] = int(std::round(r));
- Reductions[PV][imp][d][mc] = std::max(Reductions[NonPV][imp][d][mc] - 1, 0);
+ Reductions[imp][d][mc] = std::round(r);
// Increase reduction for non-PV nodes when eval is not improving
if (!imp && r > 1.0)
- Reductions[NonPV][imp][d][mc]++;
+ Reductions[imp][d][mc]++;
}
for (int d = 0; d < 16; ++d)