Come posso rappresentare un numero infinito in Python? Indipendentemente dal numero inserito nel programma, nessun numero dovrebbe essere maggiore di questa rappresentazione dell'infinito.
Come posso rappresentare un numero infinito in Python? Indipendentemente dal numero inserito nel programma, nessun numero dovrebbe essere maggiore di questa rappresentazione dell'infinito.
Risposte:
In Python puoi fare:
test = float("inf")
In Python 3.5, puoi fare:
import math
test = math.inf
E poi:
test > 1
test > 10000
test > x
Sarà sempre vero. A meno che, naturalmente, come sottolineato, x sia anche infinito o "nan" ("non un numero").
Inoltre (SOLO Python 2.x), in confronto a Ellipsis
, float(inf)
è minore, ad esempio:
float('inf') < Ellipsis
ritornerebbe vero.
Ellipsis
, che è più grande di tutto, compreso l'infinito. float("inf") < Ellipsis
restituisce True
math.inf < ...
o float('inf') > Ellipsis
lancia un TypeError: unorderable types: float() < ellipsis()
, almeno per me.
Non so esattamente cosa stai facendo, ma float("inf")
ti dà un float Infinity, che è maggiore di qualsiasi altro numero.
C'è un infinito nella biblioteca NumPy: from numpy import inf
. Per ottenere l'infinito negativo si può semplicemente scrivere -inf
.
Un altro modo meno conveniente per farlo è usare la Decimal
classe:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
ritorna True
, quindi è praticamente lo stesso.
float('inf') is float('inf')
rendimenti False
troppo
float('inf') is float('inf')
-> False
, solo sostiene che si tratta di oggetti diversi con diverse istanze, ma non che i contenuti interni sono diversi - in realtà come @nemesisdesign punte float('int') == float('int')
tiene a True
. Questo è lo stesso problema del confronto di oggetti mutabili come [1,2,3] è [1,2,3] e [1,2,3] == [1,2,3], che sono, nell'ordine, falsi e True .. Altre informazioni: stackoverflow.com/questions/2988017/…
In python2.x c'era un hack sporco che serviva a questo scopo (MAI usarlo se non assolutamente necessario):
None < any integer < any string
Pertanto, il controllo i < ''
vale True
per qualsiasi numero intero i
.
È stato ragionevolmente deprecato in python3. Ora tali confronti finiscono con
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Anche se usi SymPy puoi usare sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
eccetera.
math.inf
è utile come valore iniziale nei problemi di ottimizzazione, perché funziona correttamente con min, ad es.min(5, math.inf) == 5
. Ad esempio, negli algoritmi del percorso più breve, è possibile impostare distanze sconosciute sumath.inf
senza la necessità di un caso specialeNone
o assumere un limite superiore9999999
. Allo stesso modo, è possibile utilizzare-math.inf
come valore iniziale per problemi di massimizzazione.