2

我写了这个程序来计算 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))
4

2 回答 2

4

您必须将 Decimal prec 设置为更高的值。请参阅此示例线程官方 python 站点有更多示例。

此外,您应该使用十进制进行所有计算,而不仅仅是最后一步。否则,您将无法获得所需的精度。

于 2012-10-05T13:12:30.663 回答
0

或者查看支持任意精度浮点数的 mpmath。

而且,有些算法会无限期地一次生成一位 pi(没有极高的精度要求)。

于 2012-10-05T23:10:28.983 回答