我写了这个程序来计算pi。它给了我50个小数位。我怎样才能获得更高的精度?
# pi.py - arctan(1) * 4 = pi
from math import *
from decimal import *
err = 0.0000000000000001
def arctan(n, err):
"""Uses Gregory's formula for calculating atan."""
temp = n
atan = 0
i = 3
while (abs(atan - n) > err):
atan = n
n = n - (pow(temp, i)/i) + ((pow(temp, i + 2)) / (i + 2))
i += 4
return n
def euler(a, b, err):
"""Uses Euler's formula and fibonacci numbers."""
euler = 0
temp = 5
while (abs(temp - euler) > err):
temp = euler
euler += arctan(1/b, err)
a = b + a
b = b + a
return euler
pi = euler(1, 2, err) * 4
print(Decimal.from_float(pi))
答案 0 :(得分:4)
您必须将Decimal prec设置为更高的值。见this example thread。 official python site有很多例子。
此外,您应该使用小数进行所有计算,而不仅仅是最后一步。否则你将无法获得所需的精度。
答案 1 :(得分:0)
或者看一下mpmath,它支持任意精度浮点数。
并且,有一些算法可以无限期地(无需极高的精度要求)一次生成一位pi。