我需要更多的小数位数来计算圆周率



我正试图在python中制作一个Pi计算器,但我需要更多的小数点。

如果有人编辑我的代码并仔细解释他们所做的事情,那会有很大帮助。

这是我正在使用的代码。

import math
d = 0
ans = 0
display = 0
while True:
display += 1
d += 1
ans += 1/d**2
if display == 1000000:
print(math.sqrt(ans*6))
display = 0
# displays value calculated every 1m iterations

~85m迭代后的输出:(3.14159264498239(

我需要超过15位小数(3.14159264498239(

你对π²/6使用了一个收敛速度非常慢的级数,所以用这种方法不会得到非常精确的值。浮点限制阻止了3.14159264498239之后的进一步进展,但无论如何,在任何合理的时间内都不会有太多进展。你可以通过的一些组合来解决这些问题

  • 微优化您的代码,

  • 存储一个值列表,将其反转并使用math.fsum

  • 使用decimal.Decimal

  • 使用更好的系列(像这个(,

  • 使用一种快速收敛到π值的方法,而不是像这样的级数,

  • 使用PyPy,或者比Python更快的语言,

  • from math import pi

您可以尝试使用生成器:

def oddnumbers():
n = 1
while True:
yield n
n += 2

def pi_series():
odds = oddnumbers()
approximation = 0
while True:
approximation += (4 / next(odds))
yield approximation
approximation -= (4 / next(odds))
yield approximation

approx_pi = pi_series()
for x in range(10000000):
print(next(approx_pi))

相关内容

  • 没有找到相关文章

最新更新