]> git.sesse.net Git - stockfish/blobdiff - src/evaluate.cpp
Correctly round evaluation to grain size
[stockfish] / src / evaluate.cpp
index 58feae39c470b57406c1305c4c43d3ddc9e593b1..53afc447aed901b1d39df15f63e9461cadb3cc83 100644 (file)
@@ -562,20 +562,19 @@ namespace {
         }
 
         // Special extra evaluation for bishops
-        if (Piece == BISHOP)
+        if (Piece == BISHOP && pos.is_chess960())
         {
             // An important Chess960 pattern: A cornered bishop blocked by
             // a friendly pawn diagonally in front of it is a very serious
             // problem, especially when that pawn is also blocked.
             if (s == relative_square(Us, SQ_A1) || s == relative_square(Us, SQ_H1))
             {
-                SquareDelta d = pawn_push(Us) 
-                   + (square_file(s) == FILE_A ? DELTA_E : DELTA_W);
-                if (pos.piece_on(s + d) == piece_of_color_and_type(Us, PAWN))
+                Square d = pawn_push(Us) + (square_file(s) == FILE_A ? DELTA_E : DELTA_W);
+                if (pos.piece_on(s + d) == make_piece(Us, PAWN))
                 {
                     if (!pos.square_is_empty(s + d + pawn_push(Us)))
                         bonus -= 2*TrappedBishopA1H1Penalty;
-                    else if (pos.piece_on(s + 2*d) == piece_of_color_and_type(Us, PAWN))
+                    else if (pos.piece_on(s + 2*d) == make_piece(Us, PAWN))
                         bonus -= TrappedBishopA1H1Penalty;
                     else
                         bonus -= TrappedBishopA1H1Penalty / 2;
@@ -840,8 +839,8 @@ namespace {
                 // If there is an enemy rook or queen attacking the pawn from behind,
                 // 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<ROOK>(s)))
+                if (   (squares_in_front_of(Them, s) & pos.pieces(ROOK, QUEEN, Them))
+                    && (squares_in_front_of(Them, s) & pos.pieces(ROOK, QUEEN, Them) & pos.attacks_from<ROOK>(s)))
                     unsafeSquares = squaresToQueen;
                 else
                     unsafeSquares = squaresToQueen & (ei.attackedBy[Them][0] | pos.pieces_of_color(Them));
@@ -1106,7 +1105,7 @@ namespace {
     Value ev = Value((eg * int(sf)) / SCALE_FACTOR_NORMAL);
 
     int result = (mg_value(v) * int(ph) + ev * int(128 - ph)) / 128;
-    return Value(result & ~(GrainSize - 1));
+    return Value((result + GrainSize / 2) & ~(GrainSize - 1));
   }