为什么我的 Chudnovsky 算法程序会给出错误的结果?

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

我正在尝试在 python 中编写 Chudnovsky 算法。但是,当我 运行 我的代码时,它给了我一个非常小的数字 (-5.051212624421025e-55),这不是 pi。我在上中学,我不认识任何人可以帮助我。我做错了什么?

这是 Chudnovsky 公式的 link:https://levelup.gitconnected.com/generating-the-value-of-pi-to-a-known-number-of-decimals-places-in-python-e93986bb474d

这是我的代码:

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)

这是我更新后的代码:

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)

我看到两个错误:

  1. Wikipedia 上显示的公式相比,您似乎应该使用迭代变量 i(名为 q在公式中)您当前在循环中使用 k 的位置。在您的代码中 ki.

    的上限
  2. Python中的求幂运算符是**,不是^(按位异或)。