Wie tippe ich ein Gleitkomma-Unendlichkeitsliteral in Python ein?


76

Wie tippe ich ein Gleitkomma-Unendlichkeitsliteral in Python?

ich habe gehört

 inf = float('inf')

ist nicht tragbar. Daher habe ich folgendes empfohlen:

 inf = 1e400

Ist einer dieser Standard oder tragbar? Was ist die beste Vorgehensweise?

Antworten:


63

In Python 2.6 ist es portabel, wenn die CPU es unterstützt

Die Funktion float () verwandelt nun den String nan in einen IEEE 754 Not A Number-Wert und + inf und -inf in eine positive oder negative Unendlichkeit. Dies funktioniert auf jeder Plattform mit IEEE 754-Semantik.


15
@fmark: Viel Glück beim Finden einer Plattform, auf der Python ausgeführt wird, die jedoch keine IEEE 754-Semantik aufweist. Theoretisch float('inf')sollte ValueErrorauf diesen Plattformen angehoben werden, aber meines Wissens wurde dieses Verhalten nie getestet, da Python (zumindest neuere Versionen von Python) eine solche Plattform noch nicht erfüllt hat. In der Praxis mach dir keine Sorgen.
Mark Dickinson

16

float('inf')ist nicht portierbar wie in nicht portierbar zurück zu Python 2.5, wenn die String-Ausgabe zwischen den Plattformen variiert. Ab 2.6 float('inf')funktioniert es garantiert auf IEEE-754-Compliance-Plattformen (siehe: http://www.python.org/dev/peps/pep-0754/ ).

(Und die Empfehlung scheint im Bereich von 1e30000 zu liegen, nicht nur von 1e400.)


11

Vielleicht könnten Sie so etwas tun

try:
    inf = float('inf')
except:  # check for a particular exception here?
    inf = 1e30000

6
+1. float('inf')ist definitiv im Allgemeinen zu bevorzugen. Es ist sogar möglich, dass 'inf = 1e30000` OverflowErrorin einer zukünftigen Version von Python anfängt zu erhöhen, anstatt eine Unendlichkeit zu erzeugen.
Mark Dickinson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.