Como posso representar um número infinito em python? Independentemente do número digitado no programa, nenhum número deve ser maior que essa representação do infinito.
Como posso representar um número infinito em python? Independentemente do número digitado no programa, nenhum número deve ser maior que essa representação do infinito.
Respostas:
No Python, você pode fazer:
test = float("inf")
No Python 3.5, você pode fazer:
import math
test = math.inf
E depois:
test > 1
test > 10000
test > x
Sempre será verdade. A menos, é claro, como apontado, x também é infinito ou "nan" ("não é um número").
Além disso (apenas em Python 2.x), em comparação com Ellipsis
, float(inf)
é menor, por exemplo:
float('inf') < Ellipsis
retornaria verdadeiro.
Ellipsis
, o que compara mais do que tudo, incluindo o infinito. float("inf") < Ellipsis
retorna True
math.inf < ...
ou float('inf') > Ellipsis
joga um TypeError: unorderable types: float() < ellipsis()
, pelo menos para mim.
Não sei exatamente o que você está fazendo, mas float("inf")
fornece um infinito flutuante, que é maior que qualquer outro número.
Há uma infinidade na biblioteca NumPy: from numpy import inf
. Para obter infinito negativo, basta escrever -inf
.
Outra maneira, menos conveniente, de fazer isso é usar a Decimal
classe:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
retorna True
, então é praticamente o mesmo.
float('inf') is float('inf')
retornaFalse
float('inf') is float('inf')
-> False
, apenas afirma que eles são diferentes objetos com diferentes instâncias, mas não que o conteúdo interno são diferentes - na verdade como @nemesisdesign pontas float('int') == float('int')
detém a True
. Esse é o mesmo problema, como comparar objetos mutáveis como [1,2,3] é [1,2,3] e [1,2,3] == [1,2,3], que são, em ordem, False e True .. Mais informações em: stackoverflow.com/questions/2988017/…
No python2.x, havia um hack sujo que atendia a esse propósito (NUNCA use-o, a menos que seja absolutamente necessário):
None < any integer < any string
Assim, a verificação i < ''
vale True
para qualquer número inteiro i
.
Foi razoavelmente obsoleto no python3. Agora, essas comparações terminam com
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Além disso, se você usa o SymPy, pode usar sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
etc.
math.inf
é útil como valor inicial em problemas de otimização, porque funciona corretamente com min, por exemplo.min(5, math.inf) == 5
. Por exemplo, nos algoritmos de caminho mais curto, você pode definir distâncias desconhecidasmath.inf
sem precisar de um caso especialNone
ou assumir um limite superior9999999
. Da mesma forma, você pode usar-math.inf
como um valor inicial para problemas de maximização.