OverflowError: (34, 'Ergebnis zu groß')

7

Ich bekomme einen Überlauffehler (OverflowError: (34, 'Ergebnis zu groß')
Ich möchte Pi auf 100 Dezimalstellen berechnen. Hier ist mein Code:

%Vor%     
user3033766 25.11.2013, 19:36
quelle

4 Antworten

14

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:

%Vor%     
Peter DeGlopper 25.11.2013, 19:44
quelle
9

Sie haben die Grenze der float Unterstützung Ihrer Plattform erreicht, wahrscheinlich nach k = 256 :

%Vor%

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.

%Vor%     
Martijn Pieters 25.11.2013 19:42
quelle
0

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.

    
Bence 25.11.2013 19:49
quelle
0

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)

    
员建新 19.06.2017 07:51
quelle

Tags und Links