Introduce assert for stats update
authorJoost VandeVondele <Joost.VandeVondele@gmail.com>
Sun, 26 Mar 2017 00:57:07 +0000 (17:57 -0700)
committerJoona Kiiski <joona@zoox.com>
Sun, 26 Mar 2017 00:57:07 +0000 (17:57 -0700)
Make sure updates to the stats are done in a stable way.

No functional change

Closes #1038
Closes #1037

src/movepick.h
tests/instrumented.sh

index c191418..ee7cf4a 100644 (file)
@@ -42,7 +42,11 @@ struct HistoryStats {
     Square from = from_sq(m);
     Square to = to_sq(m);
 
-    table[c][from][to] -= table[c][from][to] * abs(int(v)) / 324;
+    const int denom = 324;
+
+    assert(abs(int(v)) <= denom); // Needed for stability.
+
+    table[c][from][to] -= table[c][from][to] * abs(int(v)) / denom;
     table[c][from][to] += int(v) * 32;
   }
 
@@ -65,7 +69,11 @@ struct Stats {
   void update(Piece pc, Square to, Move m) { table[pc][to] = m; }
   void update(Piece pc, Square to, Value v) {
 
-    table[pc][to] -= table[pc][to] * abs(int(v)) / 936;
+    const int denom = 936;
+
+    assert(abs(int(v)) <= denom); // Needed for stability.
+
+    table[pc][to] -= table[pc][to] * abs(int(v)) / denom;
     table[pc][to] += int(v) * 32;
   }
 
index a6950e1..4c68815 100755 (executable)
@@ -61,6 +61,10 @@ cat << EOF > game.exp
  send "go nodes 1000\n"
  expect "bestmove"
 
+ send "position fen 5rk1/1K4p1/8/8/3B4/8/8/8 b - - 0 1\n"
+ send "go depth 30\n"
+ expect "bestmove"
+
  send "quit\n"
  expect eof