Wie kann ich eine unendliche Zahl in Python darstellen? Unabhängig davon, welche Zahl Sie in das Programm eingeben, sollte keine Zahl größer sein als diese Darstellung der Unendlichkeit.
Wie kann ich eine unendliche Zahl in Python darstellen? Unabhängig davon, welche Zahl Sie in das Programm eingeben, sollte keine Zahl größer sein als diese Darstellung der Unendlichkeit.
Antworten:
In Python können Sie Folgendes tun:
test = float("inf")
In Python 3.5 können Sie Folgendes tun:
import math
test = math.inf
Und dann:
test > 1
test > 10000
test > x
Wird immer wahr sein. Es sei denn natürlich, wie bereits erwähnt, ist x auch unendlich oder "nan" ("keine Zahl").
Zusätzlich (Python 2.x ONLY), im Vergleich zu Ellipsis
, float(inf)
ist weniger, zum Beispiel:
float('inf') < Ellipsis
würde wahr zurückgeben.
Ellipsis
, das mehr als alles vergleicht, einschließlich der Unendlichkeit. float("inf") < Ellipsis
gibt True zurück
math.inf < ...
oder float('inf') > Ellipsis
werfe einen TypeError: unorderable types: float() < ellipsis()
, zumindest für mich.
Seit Python 3.5 können Sie Folgendes verwenden math.inf
:
>>> import math
>>> math.inf
inf
Ich weiß nicht genau, was Sie tun, aber float("inf")
Sie erhalten eine Float-Unendlichkeit, die größer ist als jede andere Zahl.
In der NumPy-Bibliothek gibt es eine Unendlichkeit : from numpy import inf
. Um eine negative Unendlichkeit zu erreichen, kann man einfach schreiben -inf
.
Eine andere, weniger bequeme Möglichkeit, dies zu tun, ist die Verwendung von Decimal
class:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
kehrt zurück True
, also ist es ziemlich dasselbe.
float('inf') is float('inf')
kehrt False
auch zurück
float('inf') is float('inf')
-> False
, gilt nur, dass es sich um unterschiedliche Objekte mit unterschiedlichen Instanzen handelt, aber nicht, dass die internen Inhalte unterschiedlich sind - tatsächlich, wie @nemesisdesign gezeigt float('int') == float('int')
hat True
. Dies ist das gleiche Problem wie beim Vergleich von veränderlichen Objekten wie [1,2,3] [1,2,3] und [1,2,3] == [1,2,3], die der Reihe nach falsch sind und True .. Weitere Informationen finden Sie unter: stackoverflow.com/questions/2988017/…
In python2.x gab es einen schmutzigen Hack, der diesem Zweck diente (NIEMALS verwenden, es sei denn, dies ist absolut notwendig):
None < any integer < any string
Somit ist die Überprüfung i < ''
hält True
für jede ganze Zahl i
.
Es wurde in Python3 einigermaßen veraltet. Nun enden solche Vergleiche mit
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Auch wenn Sie SymPy verwenden, können Sie verwenden sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
usw.
math.inf
ist als Anfangswert bei Optimierungsproblemen nützlich, da es mit min korrekt funktioniert, z.min(5, math.inf) == 5
. Beispielsweise können Sie bei Algorithmen mit kürzesten Pfaden unbekannte Entfernungen festlegen,math.inf
ohne dass ein Sonderfall erforderlich istNone
oder eine Obergrenze angenommen wird9999999
. Ebenso können Sie-math.inf
als Startwert für Maximierungsprobleme verwenden.