Como posso representar um número infinito em Python?


559

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.


29
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 desconhecidas math.infsem precisar de um caso especial Noneou assumir um limite superior 9999999. Da mesma forma, você pode usar -math.infcomo um valor inicial para problemas de maximização.
Coronel Panic

Na maioria dos casos, uma alternativa ao uso do math.inf em problemas de otimização é começar com o primeiro valor.
Tobias Bergkvist

Respostas:


707

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.


15
E se x também é inf, isso não será verdade.
Maxim Egorushkin 15/10/11

5
Observe que o infinito é definido na norma IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ), na qual qualquer linguagem moderna confiará . Outro ponto é que, de acordo com essa norma, o infinito deve (obviamente) ser um número de ponto flutuante. Isso pode explicar por que o Python escolheu essa sintaxe desagradável.
quickbug

3
Também não será verdade se x for incorporado Ellipsis, o que compara mais do que tudo, incluindo o infinito. float("inf") < Ellipsisretorna True
Singleton

2
Não tenho certeza sobre o último, math.inf < ...ou float('inf') > Ellipsisjoga um TypeError: unorderable types: float() < ellipsis(), pelo menos para mim.
Peter Goldsborough

2
Estou no 3.5. Provavelmente uma coisa 2.x / 3.x.
22826 Peter Goldsborough #

80

Desde o Python 3.5, você pode usar math.inf:

>>> import math
>>> math.inf
inf

47

Parece que ninguém mencionou explicitamente o infinito negativo, então acho que devo adicioná-lo.

Para infinito positivo (apenas por uma questão de completude):

math.inf

Para infinito negativo:

-math.inf

30

Não sei exatamente o que você está fazendo, mas float("inf")fornece um infinito flutuante, que é maior que qualquer outro número.


27

Há uma infinidade na biblioteca NumPy: from numpy import inf. Para obter infinito negativo, basta escrever -inf.


24

Outra maneira, menos conveniente, de fazer isso é usar a Decimalclasse:

from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')

21
por que você não acrescenta por que é menos conveniente e por que alguém deveria usá-lo ?
Niccolò

4
Vamos ver: Decimal('Infinity') == float('inf')retorna True, então é praticamente o mesmo.
Denis Malinovsky

8
@afzal_SH também float('inf') is float('inf')retornaFalse
nemesisdesign

4
infinito é diferente, mesmo de si mesmo, para que o seu comentário não faz muito sentido para mim, IMHO
nemesisdesign

5
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/…
Manoel Vilela

13

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 Truepara qualquer número inteiro i.

Foi razoavelmente obsoleto no python3. Agora, essas comparações terminam com

TypeError: unorderable types: str() < int()

5
Se você realmente tem yo uso isso, pelo menos envolvê-la em alguns nomes legíveis como:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Ali Rasim Kocal

5
Mas você não precisa usar isso.
Joost

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.