2017-07-03 6 views
0

PythonでNilakanthaシリーズを使用してpiの桁を計算するプログラムを作成しようとしています。それが実行されるたびに、それは私に50小数を与えることはありません。まだPythonを学ぶので、どんな助けもありがたいです。Python - piの数字を計算しようとしていて、小数点以下48桁を超えることはできません。

# Program using Nilakantha Series to crunch digits of pi 
from math import * 
from decimal import * 

getcontext().prec = 200 # this is not doing anything 

# epsilon is how accurate I want to be to pi 
EPSILON = 0.000000000000000000000000000000000000000000000000000001 

sum = float(3) 
step = 0 

i = 2 

while abs(pi - sum) >= EPSILON: 
    step += 1 
    print (step) 
    if step % 2 == 1: 
     sum += 4.0/(i * (i + 1) * (i + 2)) 
     i += 2 
    else: 
     sum -= 4.0/(i * (i + 1) * (i + 2)) 
     i += 2 

print (Decimal(sum)) 
print (Decimal(pi)) 
print ("Total itterations: ", step) 
print ("Accurate to: ", EPSILON) 
+0

単純な回避策は、次の桁を計算し、整数を文字列に保持して追加するだけです。 –

+0

getcontext()は小数点以下の桁数です。 https://docs.python.org/3/library/decimal.html計算で浮動小数点数 – Mic

+1

を使用していますが、ここでは実際には50桁の精度を計算していないことに注意してください。浮動小数点が保持できる有効数字のおよそ16桁または17桁程度の精度しか持たないmath.piで与えられた値の小数点以下50桁まで正確な数値を計算しています。 – Mic

答えて

1

Piを計算するためにDecimalクラスを使用するのではなく、floatクラスを計算しています。 getcontext()は10進数に影響を与えますが、浮動小数点には影響しません。

Decimalを使用する場合は、に変換するコードをルーピングに変更してください。 AFAIK、Piの値はPythonでは小数点として利用できないので、他の場所から値を取得する必要があります(http://www.geom.uiuc.edu/~huberty/math5337/groupe/digits.html)。

関連する問題