2017-02-11 3 views
0

Ich schreibe ein Programm, das eine unendliche Summe verwendet, um pi sehr schnell auf eine große Anzahl von Dezimalstellen zu berechnen, 22 Iterationen ergeben 15 Dezimalstellen. Aufgrund der Einschränkungen von Python ist dies jedoch die maximale Anzahl von Dezimalstellen, die angezeigt werden können. Also versuchen Sie es und beheben Sie dieses Problem Ich schaute auf das Internet und fand this website, die Informationen über die Python-Dezimal-Klasse enthalten.Wie man Dezimalwerte als Variable speichert

Dies schien die perfekte Lösung für mein Problem, aber beim Versuch diese Methode konnte ich nicht die Zahlen hinzufügen und speichern Sie sie zu einer Variablen. Nachdem ich auf die ursprüngliche Seite zurückgekehrt war, um eine Antwort zu finden, konnte ich nichts finden, was die Variable betrifft. Aber die Seite ist lächerlich lang, und ich hätte leicht etwas übersehen können.

Hier ist mein Code, mit aus dem Dezimalteil gut funktioniert:

from decimal import * 
getcontext().prec = 30 

n = 0 
value = 1/2 
while True: 
    n += 1 
    top = 1 
    bottom = 2 ** (2 * n + 1) * (2 * n + 1) * 2 
    for i in range(n): 
     top *= 2 * i + 1 
     if i != 0: bottom *= 2 * i + 2 

    value += Decimal(top)/Decimal(bottom) 
    print(value * 6) 

EDIT: Dies ist der Fehler, die ich erhalten haben:

TypeError: unsupported operand type(s) for +=: 'float' and 'decimal.Decimal' 

Dies ist die erste Zeit, dass ich mit dieser Klasse gearbeitet habe und unsicher bin, wie ich weiterarbeiten kann.

+0

@StefanPochmann Ich habe meine Frage aktualisiert –

Antwort

2

Ja, das ist so, weil das Hinzufügen Schwimmer in Dezimalzahlen nicht unterstützt wird, value machen (die float) ein Decimal zuerst:

value = Decimal(1/2) 

Der Fehler explizit Sie dies zu sagen, zu sagen, wo der Fehler entstanden ist, welcher Betreiber hat es verursacht und welche Arten es hat.

Werfen Sie einen Blick auf die Decimal FAQ, die in der Dokumentation für decimal zur Verfügung gestellt wird, es hat Fragen, die Sie interessiert sein könnten, wenn Sie mit Dezimalzahlen arbeiten.

+0

Danke, es scheint im Nachhinein so einfach! Das Programm funktioniert nun wie vorgesehen. –

+1

so jetzt können Sie die Antwort annehmen :) –

+0

@ Jean-FrançoisFabre Ich wollte, aber ich musste wie 10 Minuten warten, habe ich jetzt aber –

Verwandte Themen