Skip to content

Commit

Permalink
Fix divide by zero bug in late game
Browse files Browse the repository at this point in the history
If the game got late enough that move_importance(currentPly) * slowMover / 100
rounds to 0, then we ended up dividing 0 by 0 when only looking 1 move ahead.

This apparently caused the search to almost immediately abort and Stockfish
would blunder in long games. So convert thisMoveImportance to a double.

No functional change.
  • Loading branch information
Matt14916 authored and mcostalba committed Oct 27, 2013
1 parent 48f38f3 commit d454cd4
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/timeman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,14 @@ namespace {
const double TMaxRatio = (T == OptimumTime ? 1 : MaxRatio);
const double TStealRatio = (T == OptimumTime ? 0 : StealRatio);

int thisMoveImportance = move_importance(currentPly) * slowMover / 100;
double thisMoveImportance = double(move_importance(currentPly) * slowMover) / 100;
int otherMovesImportance = 0;

for (int i = 1; i < movesToGo; ++i)
otherMovesImportance += move_importance(currentPly + 2 * i);

double ratio1 = (TMaxRatio * thisMoveImportance) / double(TMaxRatio * thisMoveImportance + otherMovesImportance);
double ratio2 = (thisMoveImportance + TStealRatio * otherMovesImportance) / double(thisMoveImportance + otherMovesImportance);
double ratio1 = (TMaxRatio * thisMoveImportance) / (TMaxRatio * thisMoveImportance + otherMovesImportance);
double ratio2 = (thisMoveImportance + TStealRatio * otherMovesImportance) / (thisMoveImportance + otherMovesImportance);

return int(floor(myTime * std::min(ratio1, ratio2)));
}
Expand Down

0 comments on commit d454cd4

Please sign in to comment.