X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=f6a2ed0dcdb0ad3b1d7daf4371f7d6cbe8c12c96;hp=d291e46b6c8c21c7816952adf89c311874cbcbc5;hb=80bee85d5f48cc1e06f16236a73c86a14c1d0756;hpb=918533dc06f8d5f9458e731d38ebdac1b96ef9eb diff --git a/src/evaluate.cpp b/src/evaluate.cpp index d291e46b..f6a2ed0d 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" @@ -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(0) ? 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)); }