¿Cómo puedo representar un número infinito en python? No importa qué número ingrese en el programa, ningún número debe ser mayor que esta representación de infinito.
¿Cómo puedo representar un número infinito en python? No importa qué número ingrese en el programa, ningún número debe ser mayor que esta representación de infinito.
Respuestas:
En Python, puedes hacer:
test = float("inf")
En Python 3.5, puedes hacer:
import math
test = math.inf
Y entonces:
test > 1
test > 10000
test > x
Siempre sera verdad. A menos, por supuesto, como se señaló, x también es infinito o "nan" ("no es un número").
Además (SOLO Python 2.x), en comparación con Ellipsis
, float(inf)
es menor, por ejemplo:
float('inf') < Ellipsis
Volvería cierto.
Ellipsis
, que se compara más que todo, incluido el infinito. float("inf") < Ellipsis
devuelve True
math.inf < ...
o float('inf') > Ellipsis
lanza un TypeError: unorderable types: float() < ellipsis()
, al menos para mí.
Desde Python 3.5 puedes usar math.inf
:
>>> import math
>>> math.inf
inf
No sé exactamente lo que estás haciendo, pero float("inf")
te da un infinito flotante, que es mayor que cualquier otro número.
Existe una infinidad en la biblioteca NumPy: from numpy import inf
. Para obtener el infinito negativo, uno simplemente puede escribir -inf
.
Otra forma menos conveniente de hacerlo es usar Decimal
class:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
regresa True
, así que es más o menos lo mismo.
float('inf') is float('inf')
regresaFalse
float('inf') is float('inf')
-> False
, simplemente sostiene que son diferentes objetos con diferentes instancias, pero no que los contenidos internos son diferentes - en realidad como @nemesisdesign puntas float('int') == float('int')
sostiene a True
. Este es el mismo problema, como comparar objetos mutables como [1,2,3] es [1,2,3] y [1,2,3] == [1,2,3], que son, en orden, falsos and True .. Más información ver: stackoverflow.com/questions/2988017/…
En python2.x hubo un hack sucio que sirvió para este propósito (NUNCA lo use a menos que sea absolutamente necesario):
None < any integer < any string
Por lo tanto, la verificación se i < ''
cumple True
para cualquier número entero i
.
Se ha desaprobado razonablemente en python3. Ahora tales comparaciones terminan con
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Además, si usa SymPy, puede usar sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
etc.
math.inf
es útil como valor inicial en problemas de optimización, porque funciona correctamente con min, por ejemplo.min(5, math.inf) == 5
. Por ejemplo, en los algoritmos de ruta más corta, puede establecer distancias desconocidasmath.inf
sin necesidad de utilizar un caso especialNone
o asumir un límite superior9999999
. Del mismo modo, puede usarlo-math.inf
como valor inicial para problemas de maximización.