如何解决寻找 pi 直到百分比误差低于 1e-2
我正在使用涉及阶乘和双阶乘的 this formula 来查找 pi 的值,直到百分比误差低于 1e-2。出于某种原因,在 PE 足够低之前计算 pi 的 while 循环不会停止(至少我认为正在发生)。
import numpy as np
k = 1
pe = 100
def doublefactorial(n):
if n == 0 or n == 1:
return 1
return n * doublefactorial(n - 2)
while pe >= 1e-2:
f = 1
for i in range(1,k + 1):
f = f * i
D = doublefactorial(2 * k + 1)
r = f / D
pe = abs(((r - np.pi) / np.pi) * 100)
k = k + 1
print("pi= ",r,"PE= ",pe)
解决方法
您的代码中有几处可以改进,以下是带有所述改进的注释版本:
- 对于您用来计算
k!
的内容很难理解,因此我使用了 Python 的阶乘函数并将您的f/D
更改为N/D
,保持您使用的分数形式。立> - 这是一个求和,所以不要忘记每次迭代更新
r
的值。 - 公式的输出是 Pi / 2,因此您无法直接将其与
np.pi
进行比较。 - 您以
k=1
开头,但您的公式指出k=0
。
此外,我将打印内容移到循环内,以便您可以看到每次迭代时更新的值。
import numpy as np
import math
k = 0
r = 0
pe = 100
def doublefactorial(n):
if n == 0 or n == 1:
return 1
return n * doublefactorial(n - 2)
while pe >= 1e-2:
# using math.factorial for easier to read code
N = math.factorial(k)
D = doublefactorial(2 * k + 1)
# our approximation = numerator / dividend
# update r's value (this is equivalent to r = r + N/D)
r += N / D
# don't forget the formula gives Pi/2 so to compare and print we should double it...
pi_approx = 2 * r
pe = abs(((pi_approx - np.pi) / np.pi) * 100)
k = k + 1
print("pi= ",pi_approx,"PE= ",pe)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。