Clarify stats range
authorMarco Costalba <mcostalba@gmail.com>
Fri, 18 Aug 2017 09:02:35 +0000 (02:02 -0700)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 18 Aug 2017 09:02:35 +0000 (02:02 -0700)
Current update formula ensures that the
possible value range is [-32 * D, 32 * D].

So we never overflow if abs(32 * D) < INT16_MAX

Thanks to Joost and mstembera to clarify this.

No functional change.

src/movepick.h

index d6451f6bf0ad4575212802a1708c4792a2ce5887..db0ba3c465e4e8b5aacc832c6bff57955480ba9d 100644 (file)
@@ -38,12 +38,8 @@ struct StatBoards : public std::array<std::array<T, Size2>, Size1> {
 
   void update(T& entry, int bonus, const int D) {
 
 
   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
+    assert(abs(bonus) <= D); // Ensure range is [-32 * D, 32 * D]
+    assert(abs(32 * D) < INT16_MAX); // Ensure we don't overflow
 
     entry += bonus * 32 - entry * abs(bonus) / D;
 
 
     entry += bonus * 32 - entry * abs(bonus) / D;