From: Marco Costalba Date: Sat, 10 Aug 2013 15:11:13 +0000 (+0200) Subject: Fix GrainSize rounding error X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=94a3608ab9f2334784ac3b111dc79c9eb5e33ba3 Fix GrainSize rounding error The rounding formula is different between positive and negative scores due to the GrainSize/2 term that is asymmetric. So use truncation instead of rounding. This guarantees that evaluation is rounded to zero in the same way for both positive and negative scores. Found with position's flip bench: 4634244 --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 25ee79ea..147a1b3e 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -1083,7 +1083,7 @@ Value do_evaluate(const Position& pos, Value& margin) { int ev = (eg_value(v) * int(sf)) / SCALE_FACTOR_NORMAL; int result = (mg_value(v) * int(ph) + ev * int(128 - ph)) / 128; - return Value((result + GrainSize / 2) & ~(GrainSize - 1)); + return Value((result / GrainSize) * GrainSize); // Sign independent } // apply_weight() weights score v by score w trying to prevent overflow