X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=47d5eb3e9bc93760432f369c04195afff4f20ac3;hp=d291e46b6c8c21c7816952adf89c311874cbcbc5;hb=94b9c65e09b5d396bebb29b62d9979139b5fbdfa;hpb=918533dc06f8d5f9458e731d38ebdac1b96ef9eb diff --git a/src/evaluate.cpp b/src/evaluate.cpp index d291e46b..47d5eb3e 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -29,7 +29,6 @@ #include "evaluate.h" #include "material.h" #include "pawns.h" -#include "scale.h" #include "thread.h" #include "ucioption.h" @@ -373,8 +372,8 @@ Value do_evaluate(const Position& pos, EvalInfo& ei) { // colored bishop endgames, and use a lower scale for those if ( phase < PHASE_MIDGAME && pos.opposite_colored_bishops() - && ( (factor[WHITE] == SCALE_FACTOR_NORMAL && eg_value(ei.value) > Value(0)) - || (factor[BLACK] == SCALE_FACTOR_NORMAL && eg_value(ei.value) < Value(0)))) + && ( (factor[WHITE] == SCALE_FACTOR_NORMAL && eg_value(ei.value) > VALUE_ZERO) + || (factor[BLACK] == SCALE_FACTOR_NORMAL && eg_value(ei.value) < VALUE_ZERO))) { ScaleFactor sf; @@ -822,7 +821,7 @@ namespace { // add all X-ray attacks by the rook or queen. Otherwise consider only // the squares in the pawn's path attacked or occupied by the enemy. if ( (squares_behind(Us, s) & pos.pieces(ROOK, QUEEN, Them)) - && (squares_behind(Us, s) & pos.pieces(ROOK, QUEEN, Them) & pos.attacks_from(s))) + && (squares_behind(Us, s) & pos.pieces(ROOK, QUEEN, Them) & pos.attacks_from(s))) unsafeSquares = squaresToQueen; else unsafeSquares = squaresToQueen & (ei.attacked_by(Them) | pos.pieces_of_color(Them)); @@ -861,8 +860,7 @@ namespace { // value if the other side has a rook or queen. if (square_file(s) == FILE_A || square_file(s) == FILE_H) { - if ( pos.non_pawn_material(Them) <= KnightValueMidgame - && pos.piece_count(Them, KNIGHT) <= 1) + if (pos.non_pawn_material(Them) <= KnightValueMidgame) ebonus += ebonus / 4; else if (pos.pieces(ROOK, QUEEN, Them)) ebonus -= ebonus / 4; @@ -895,7 +893,7 @@ namespace { Square s = pop_1st_bit(&b); Square queeningSquare = relative_square(c, make_square(square_file(s), RANK_8)); int d = square_distance(s, queeningSquare) - - (relative_rank(c, s) == RANK_2) // Double pawn push + - int(relative_rank(c, s) == RANK_2) // Double pawn push - square_distance(pos.king_square(opposite_color(c)), queeningSquare) + int(c != pos.side_to_move()); @@ -904,7 +902,7 @@ namespace { if (d < 0 || pathDefended) { - int mtg = RANK_8 - relative_rank(c, s); + int mtg = RANK_8 - relative_rank(c, s) - int(relative_rank(c, s) == RANK_2); int blockerCount = count_1s_max_15(squares_in_front_of(c, s) & pos.occupied_squares()); mtg += blockerCount; d += blockerCount; @@ -1066,9 +1064,8 @@ namespace { } - // 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. + // 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(const Score& v, Phase ph, const ScaleFactor sf[]) { @@ -1076,9 +1073,11 @@ namespace { assert(eg_value(v) > -VALUE_INFINITE && eg_value(v) < VALUE_INFINITE); assert(ph >= PHASE_ENDGAME && ph <= PHASE_MIDGAME); - Value ev = apply_scale_factor(eg_value(v), sf[(eg_value(v) > Value(0) ? WHITE : BLACK)]); + Value eg = eg_value(v); + ScaleFactor f = sf[eg > VALUE_ZERO ? WHITE : BLACK]; + Value ev = Value((eg * int(f)) / SCALE_FACTOR_NORMAL); - int result = (mg_value(v) * ph + ev * (128 - ph)) / 128; + int result = (mg_value(v) * int(ph) + ev * int(128 - ph)) / 128; return Value(result & ~(GrainSize - 1)); }