【发布时间】:2015-10-12 04:48:36
【问题描述】:
数学常数 π (pi) 是一个无理数,其值约为 3.1415928... π 的精确值等于以下无穷和:π = 4/1 - 4/3 + 4/5 - 4/ 7 + 4/9 - 4/11 + ... 我们可以通过计算前几项的总和来得到 π 的一个很好的近似值。编写一个函数 approxPi(),将浮点值误差作为参数,并通过逐项计算上述总和,直到当前总和与前一个总和之间的差值的绝对值(用少一项)不大于误差。一旦函数发现差值小于误差,它应该返回新的和。请注意,此函数不应使用数学模块中的任何函数或常量。您应该使用所描述的算法来近似 π,而不是使用 Python 中的内置值。
我已经完成了以下程序,但由于某种原因,我得到的价值与书中的不同。
def pi(error):
prev = 1
current = 4
i = 1
while abs(current - prev) > error:
d = 2.0* i +1
sign = (-1)**i
prev = current
current = current + sign * 4 / d
i = i +1
return current
output In [2]: pi(0.01)
Out[2]: 3.146567747182955
但是我需要得到这个值
>>> approxPi(0.01)
3.1611986129870506
>>> approxPi(0.0000001)
3.1415928535897395
【问题讨论】:
-
正如我在上一个问题stackoverflow.com/questions/33069677/find-the-value-of-pi 中发布的那样,我看不到
error=0.01如何返回3.1611 ...,3.1611986129870506 两侧的2 个值分别是3.121594652591011 和3.12236366153074。两者都不是 -
因为(正如@skyking 所写)在 x=pi/4 处评估的 arctan(x) 的 McLaurin 展开是交替和,因此收敛缓慢。您可以通过配对项将其转换为仅正数公式,但它仍会缓慢收敛。阅读任何其他更快收敛的总和。