2017-07-03 3 views
0

Ich versuche, ein Programm zu schreiben, um Ziffern von Pi mit der Nilakantha-Serie in Python zu calclulieren. Jedes Mal, wenn es läuft, gibt es mir nicht mehr als 50 Dezimalstellen. Immer noch Python lernen, so dass jede Hilfe geschätzt wird.Python - versuchen, Ziffern von Pi zu berechnen und kann nicht nach 48 Nachkommastellen gehen

# 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

Eine einfache Problemumgehung wäre, die nächste Ziffer zu berechnen und die ganze Zahl in einer Zeichenfolge zu halten und einfach anhängen. –

+0

getcontext() ist für Dezimalzahlen. https://docs.python.org/3/library/decimal.html Ihre Berechnung verwendet float – Mic

+1

Beachten Sie, dass Sie Pi nicht wirklich zu 50 Stellen Genauigkeit hier berechnen. Sie berechnen eine Zahl, die genau auf 50 Dezimalziffern des von math.pi angegebenen Werts genau ist, der wiederum nur ungefähr der Anzahl signifikanter Stellen entspricht, die ein Gleitkomma enthalten kann, also etwa 16 oder 17. – Mic

Antwort

1

Sie verwenden nicht die Dezimalklasse, um Pi zu berechnen, sondern die Float-Klasse. getcontext() betrifft Dezimal, nicht float.

Wenn Sie Dezimal verwenden möchten, ändern Sie Ihren Code in Dezimal vor Schleife zu konvertieren. Beachten Sie, dass AFAIK, der Wert von Pi, in Python nicht als Dezimalzahl verfügbar ist. Daher müssen Sie den Wert von einer anderen Stelle erhalten (http://www.geom.uiuc.edu/~huberty/math5337/groupe/digits.html).

Verwandte Themen