mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-19 00:26:33 +08:00
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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user