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?

fmark
quelle

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.

mmmmmm
quelle
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.)

kennytm
quelle
11

Vielleicht könnten Sie so etwas tun

try:
    inf = float('inf')
except:  # check for a particular exception here?
    inf = 1e30000
John La Rooy
quelle
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