+ const int D = 324;
+ auto& entry = (*this)[c][from_to(m)];
+
+ assert(abs(bonus) <= D); // Consistency check for below formula
+
+ entry += bonus * 32 - entry * abs(bonus) / D;
+
+ assert(abs(entry) <= 32 * D);
+ }
+};
+
+/// PieceToHistory is like ButterflyHistory, but is based on PieceToBoards
+struct PieceToHistory : public PieceToBoards {
+
+ void update(Piece pc, Square to, int bonus) {
+
+ const int D = 936;
+ auto& entry = (*this)[pc][to];
+
+ assert(abs(bonus) <= D); // Consistency check for below formula
+
+ entry += bonus * 32 - entry * abs(bonus) / D;
+
+ assert(abs(entry) <= 32 * D);
+ }