Ich bekomme einen Überlauffehler (OverflowError: (34, 'Ergebnis zu groß')
Ich möchte Pi auf 100 Dezimalstellen berechnen. Hier ist mein Code:
Python-Gleitkommazahlen sind weder willkürlich noch unbegrenzt groß. Wenn k = 349, ist 16.**k
viel zu groß - das sind fast 2 ^ 1400. Glücklicherweise erlaubt die decimal
-Bibliothek eine beliebige Genauigkeit und kann mit der Größe umgehen:
Sie haben die Grenze der float
Unterstützung Ihrer Plattform erreicht, wahrscheinlich nach k = 256
:
Siehe sys.float_info
für die genauen Einschränkungen, aber es ist unwahrscheinlich, dass Sie auf eine aktuelle Kombination aus CPU und Betriebssystem treffen, die Ihnen in jedem Fall 100 signifikante Ziffern gibt; Mein MacBook Pro mit 64-Bit OS X unterstützt nur 15.
Verwenden Sie das Modul decimal
, um über Ihre Hardware-Beschränkungen hinauszugehen.
16. ** 256 ist zu groß, um in Float mit doppelter Genauigkeit gespeichert zu werden. Ich schlage vor, dass Sie Ihren Zyklus für weniger ausführen, wie Bereich (250), weil größere k-Werte sowieso nicht zu den ersten hundert Ziffern beitragen.
Eine andere Sache, die Sie versuchen könnten, ist, mit 16 zu multiplizieren. * (- k) anstatt durch 16 zu dividieren. * k. Diese Zahl wird für ein großes k auf Null gerundet, wodurch Sie keine Laufzeitfehler erhalten.
Ich schlage vor, dass Sie numpy.power anstelle von ** verwenden, es behandelt besser Überläufe. Zum Beispiel würde in Ihrem Code numpy.power (16., 256) zu inf ausgewertet, und durch Division einer endlichen Zahl durch inf ergibt sich Null, wodurch Laufzeitfehler vermieden werden, genau wie die im vorherigen Absatz vorgeschlagene Methode.
Ich benutze python3.6 AMD64, ich auch dieses Problem zu begegnen, das ist, weil Python integrierte float
ist Double-Precision-float, es ist 64-Bit, in den meisten Programmieraufgabe, 64-Bit ist genug, aber in einigen Extra-Aufgabe, es ist nicht genug (wie Science-Fiction, Big-Data-Computing)