+
+ void update(T& entry, int bonus, const int D) {
+
+ assert([&]{
+ int v = entry + bonus * 32 - entry * abs(bonus) / D;
+ return INT16_MIN < v && v < INT16_MAX;
+ }());
+
+ assert(abs(bonus) <= D); // Consistency check for below formula
+
+ entry += bonus * 32 - entry * abs(bonus) / D;
+
+ assert(abs(entry) <= 32 * D);
+ }