Search code examples
pythonpi

Why does my program for the Chudnovsky algorithm give the wrong result?


I am trying to code the Chudnovsky algorithm in python. However, when I run my code, it gives me a very small number (-5.051212624421025e-55) which is not pi. I am in middle school, and I don't know anybody that can help me. What am I doing wrong?

Here is a link to the Chudnovsky formula: https://levelup.gitconnected.com/generating-the-value-of-pi-to-a-known-number-of-decimals-places-in-python-e93986bb474d

Here is my code:

import math

def fact(exi):
    memory = exi
    for i in range(1, exi):
        memory *= i
    return memory

k = 10
s = 0

for i in range(0, k):
    a = -1^k
    b = fact(6*k)
    c = (545140134*k) + 13591409
    d = fact(3*k)
    e = (fact(k))^3
    f = (3 * k) + 3/2
    g = math.pow(640320, f)

    numerator = (a*b*c)
    denominator = (d*e*f)

    s += (numerator / denominator)

s *= 12
print(1 / s)

Here is my updated code:

import math

def fact(exi):
    memory = exi
    for i in range(1, exi):
        memory *= i
    return memory

k = 17
s = 0

for i in range(1, k):
    a = (-1)**i
    b = fact(6*i)
    c = (545140134*i) + 13591409
    d = fact(3*i)
    e = (fact(i))**3
    f = (3 * i) + 3/2
    g = math.pow(640320, f)
    num = (a*b*c)
    den = (d*e*g)
    s += (num / den)
s *= 12
print(1 / s)


Solution

  • I see two mistakes:

    1. When comparing with the formula shown on Wikipedia, it looks like you should use the iteration variable i (named q in the formula) where you currently use k in the loop. In your code k is the upper bound for i.

    2. The exponentiation operator in Python is **, not ^ (which is bitwise XOR).