+/// 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
+ assert([&]{
+ int v = entry + bonus * 32 - entry * abs(bonus) / D;
+ return INT16_MIN < v && v < INT16_MAX;
+ }());
+
+ entry += bonus * 32 - entry * abs(bonus) / D;
+
+ assert(abs(entry) <= 32 * D);
+ }