【发布时间】:2019-12-10 20:38:13
【问题描述】:
我正在尝试使用 Euler 的一种方法在 python 中定义一个近似 pi 的函数。他的公式如下:
到目前为止我的代码是这样的:
def pi_euler1(n):
numerator = list(range(2 , n))
for i in numerator:
j = 2
while i * j <= numerator[-1]:
if i * j in numerator:
numerator.remove(i * j)
j += 1
for k in numerator:
if (k + 1) % 4 == 0:
denominator = k + 1
else:
denominator = k - 1
#Because all primes are odd, both numbers inbetween them are divisible by 2,
#and by extension 1 of the 2 numbers is divisible by 4
term = numerator / denominator
我知道这是错误的,也是不完整的。我只是不太确定我之前提到的 TypeError 究竟是什么意思。我只是很坚持它,我想创建一个术语列表,然后找到他们的产品。我在正确的路线上吗?
更新: 我已经解决了这个问题,修复了由于 msconi 和 Johanc 而普遍存在的明显错误,现在使用以下代码:
import math
def pi_euler1(n):
numerator = list(range(2 , 13 + math.ceil(n*(math.log(n)+math.log(math.log(n))))))
denominator=[]
for i in numerator:
j = 2
while i * j <= numerator[-1]:
if (i * j) in numerator:
numerator.remove(i * j)
j += 1
numerator.remove(2)
for k in numerator:
if (k + 1) % 4 == 0:
denominator.append(k+1)
else:
denominator.append(k-1)
a=1
for i in range(n):
a *= numerator[i] / denominator[i]
return 4*a
这似乎有效,当我尝试在半轴刻度中绘制来自 pi 的误差图时,我遇到了域错误,但我需要将范围的上限更改为 n+1,因为 log (0) 未定义。谢谢各位
【问题讨论】:
标签: python pi approximation