N = 1 << 13 Q = [0,1,1] + [0]*(N-2) for n in range(3, N+1): Q[n] = Q[n-Q[n-1]] + Q[n-Q[n-2]] def e(n): return Q[n] - n/2 # (1) EXACT ERROR LAW: e(n) = e(a)+e(b) - [e(n-1)+e(n-2)]/2 + 3/4 ? import random random.seed(1) worst = 0.0 for _ in range(2000): n = random.randrange(10, N) a = n - Q[n-1]; b = n - Q[n-2] pred = e(a) + e(b) - (e(n-1) + e(n-2))/2 + 0.75 worst = max(worst, abs(e(n) - pred)) print("(1) exact error law, worst deviation over 2000 random n:", worst) # (2) THE ASSASSINATION at n=1522: which address hit the spike 768? print("\n(2) anatomy of the kill:") for n in range(1518, 1526): a = n - Q[n-1]; b = n - Q[n-2] hit = " <-- SPIKE" if (a == 768 or b == 768) else "" print(" n=%-5d Q=%-5d e=%+7.1f addr=(%d,%d) e_addr=(%+.1f,%+.1f)%s" % ( n, Q[n], e(n), a, b, e(a), e(b), hit)) print(" spike itself: Q(768)=%d e=%+.1f" % (Q[768], e(768))) # (3) did ANY k<=8 corridor cell ever address its previous spike? print("\n(3) spike contact per corridor [m-64 .. m-1] addressing m_prev:") for k in range(4, 10): m = 3*(1<