Jak mogę reprezentować nieskończoną liczbę w pythonie? Bez względu na to, jaką liczbę wprowadzisz do programu, żadna liczba nie powinna być większa niż ta reprezentacja nieskończoności.
Jak mogę reprezentować nieskończoną liczbę w pythonie? Bez względu na to, jaką liczbę wprowadzisz do programu, żadna liczba nie powinna być większa niż ta reprezentacja nieskończoności.
Odpowiedzi:
W Pythonie możesz:
test = float("inf")
W Python 3.5 możesz:
import math
test = math.inf
I wtedy:
test > 1
test > 10000
test > x
Zawsze będzie prawdą. O ile oczywiście, jak wskazano, x jest również nieskończonością lub „nan” („nie liczbą”).
Dodatkowo (TYLKO Python 2.x), w porównaniu do Ellipsis
, float(inf)
jest mniejszy, np .:
float('inf') < Ellipsis
zwróci prawdę.
Ellipsis
, który porównuje większy niż wszystko, w tym nieskończoność. float("inf") < Ellipsis
zwraca True
math.inf < ...
lub float('inf') > Ellipsis
rzuca TypeError: unorderable types: float() < ellipsis()
, przynajmniej dla mnie.
Od wersji Python 3.5 możesz używać math.inf
:
>>> import math
>>> math.inf
inf
Nie wiem dokładnie, co robisz, ale float("inf")
daje ci zmienną nieskończoność, która jest większa niż jakakolwiek inna liczba.
Istnieje nieskończona w bibliotece NumPy: from numpy import inf
. Aby uzyskać ujemną nieskończoność, wystarczy napisać -inf
.
Innym, mniej wygodnym sposobem na to jest użycie Decimal
klasy:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
zwraca True
, więc jest prawie tak samo.
float('inf') is float('inf')
zwracaFalse
float('inf') is float('inf')
-> False
, po prostu stwierdził, że są to różne przedmioty o różnych przypadkach, ale nie, że zawartość wewnętrzne są różne - faktycznie jak @nemesisdesign spiczasty float('int') == float('int')
trzyma się True
. Jest to ten sam problem, co porównywanie obiektów zmiennych, takich jak [1,2,3], to [1,2,3] i [1,2,3] == [1,2,3], które są, w kolejności, fałszywe i True .. Więcej informacji: stackoverflow.com/questions/2988017/…
W python2.x był brudny hack, który służył temu celowi (NIGDY nie używaj go, chyba że jest to absolutnie konieczne):
None < any integer < any string
Zatem kontrola i < ''
trzyma True
dla dowolnej liczby całkowitej i
.
Został dość przestarzały w Python3. Teraz takie porównania kończą się
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Również jeśli używasz SymPy, możesz użyć sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
itp.
math.inf
jest przydatny jako wartość początkowa w problemach optymalizacyjnych, ponieważ działa poprawnie z min, np.min(5, math.inf) == 5
. Na przykład w algorytmach najkrótszej ścieżki można ustawić nieznane odległościmath.inf
bez potrzeby specjalnego przypadkuNone
lub zakładania górnej granicy9999999
. Podobnie można użyć-math.inf
jako wartości początkowej dla problemów z maksymalizacją.