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") < Ellipsiszwraca True
math.inf < ...lub float('inf') > Ellipsisrzuca 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 Decimalklasy:
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 Truedla 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.infjest 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.infbez potrzeby specjalnego przypadkuNonelub zakładania górnej granicy9999999. Podobnie można użyć-math.infjako wartości początkowej dla problemów z maksymalizacją.