- // scale_by_game_phase() interpolates between a middle game and an endgame
- // score, based on game phase. It also scales the return value by a
- // ScaleFactor array.
-
- Value scale_by_game_phase(Value mv, Value ev, Phase ph, const ScaleFactor sf[]) {
-
- assert(mv > -VALUE_INFINITE && mv < VALUE_INFINITE);
- assert(ev > -VALUE_INFINITE && ev < VALUE_INFINITE);
- assert(ph >= PHASE_ENDGAME && ph <= PHASE_MIDGAME);
-
- ev = apply_scale_factor(ev, sf[(ev > Value(0) ? WHITE : BLACK)]);
-
- Value result = Value(int((mv * ph + ev * (128 - ph)) / 128));
- return Value(int(result) & ~(GrainSize - 1));
- }
-
-