为什么我的 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)
我看到两个错误:
与 Wikipedia 上显示的公式相比,您似乎应该使用迭代变量 i
(名为 q在公式中)您当前在循环中使用 k
的位置。在您的代码中 k
是 i
.
的上限
Python中的求幂运算符是**
,不是^
(按位异或)。
我正在尝试在 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)
我看到两个错误:
与 Wikipedia 上显示的公式相比,您似乎应该使用迭代变量
的上限i
(名为 q在公式中)您当前在循环中使用k
的位置。在您的代码中k
是i
.Python中的求幂运算符是
**
,不是^
(按位异或)。