File size: 1,145 Bytes
96cb0ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""CPU-only verification test for Ramanujan Machine v2 (Asymmetric-Degree CF Search)"""
print("Testing ramanujan-machine-cuda...")

import math

def eval_cf(a_coeffs, b_coeffs, depth=100):
    """Evaluate generalized CF: a(0) + b(1)/(a(1) + b(2)/(a(2) + ...))"""
    def a(n):
        return sum(c * n**i for i, c in enumerate(a_coeffs))
    def b(n):
        return sum(c * n**i for i, c in enumerate(b_coeffs))
    # Backward recurrence
    val = a(depth)
    for n in range(depth-1, 0, -1):
        bn = b(n)
        if abs(val) < 1e-15: break
        val = a(n) + bn / val
    return val

# Known: a(n)=2n+1, b(n)=-n^2 gives 4/pi - 1 (Brouncker-type)
# Actually: [1; 1,1,1,...] with a(n)=1,b(n)=1 = golden ratio
phi = (1 + math.sqrt(5)) / 2
val = eval_cf([1], [1])
print(f"  CF [1;1,1,...] = {val:.10f} (phi = {phi:.10f})")
assert abs(val - phi) < 1e-6, f"Expected phi, got {val}"

# Known: a(n)=2n+1, b(n)=n^2 gives e-1 (Euler's CF for e)
# Actually e = 2 + 1/(1+1/(2+1/(1+1/(1+1/(4+...))))) but that's the regular CF
# Simpler: CF with a=[1,3,5,7,...], b=[0,1,1,1,...] for 4/pi? Let's just test golden ratio.
print(f"\n1/1 tests passed")