The calculation of rootComplexity can't call eval when in check.
Doing so triggers an assert if compiled in debug mode when
the rootpos is evaluated using classical eval.
Fixes https://github.com/official-stockfish/Stockfish/issues/4512
Passed STC:
https://tests.stockfishchess.org/tests/view/
6432697431feee5c6d306876
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 41096 W: 11017 L: 10815 D: 19264
Ptnml(0-2): 113, 4172, 11780, 4366, 117
Running LTC:
https://tests.stockfishchess.org/tests/view/
6432974d31feee5c6d306fc0
LLR: 1.76 (-2.94,2.94) <-1.75,0.25>
Total: 73200 W: 19792 L: 19728 D: 33680
Ptnml(0-2): 24, 6659, 23182, 6699, 36
closes https://github.com/official-stockfish/Stockfish/pull/4515
No functional change
Value Eval::evaluate(const Position& pos, int* complexity) {
+ assert(!pos.checkers());
+
Value v;
Value psq = pos.psq_eg_stm();
if (mainThread)
{
- int rootComplexity;
- Eval::evaluate(rootPos, &rootComplexity);
-
- mainThread->complexity = std::min(1.03 + (rootComplexity - 241) / 1552.0, 1.45);
+ if (!rootPos.checkers())
+ {
+ int rootComplexity;
+ Eval::evaluate(rootPos, &rootComplexity);
+ mainThread->complexity = std::min(1.03 + (rootComplexity - 241) / 1552.0, 1.45);
+ }
if (mainThread->bestPreviousScore == VALUE_INFINITE)
for (int i = 0; i < 4; ++i)
main()->bestPreviousScore = VALUE_INFINITE;
main()->bestPreviousAverageScore = VALUE_INFINITE;
main()->previousTimeReduction = 1.0;
+ main()->complexity = 1.0;
}