我正试图在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))