2

私は円周率を計算するためにこのプログラムを書きました。小数点以下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

Decimalprecをより高い値に設定する必要があります。このスレッドの例を参照してください。公式のPythonサイトにはさらに多くの例があります。

また、最後のステップだけでなく、10進数を使用してすべての計算を行う必要があります。そうしないと、必要な精度が得られません。

于 2012-10-05T13:12:30.663 に答える
0

または、任意精度の浮動小数点数をサポートするmpmathを見てください。

また、一度に1桁の円周率を無期限に生成するアルゴリズムがあります(非常に高い精度の要件はありません)。

于 2012-10-05T23:10:28.983 に答える