Pergunta

Estou apoiando meu projeto do Python 2.6 para o Python 2.4 e 2.5. No meu projeto, usei float("inf"), e agora acho que não está disponível no Python 2.5. Existe um backport disso?

Foi útil?

Solução 4

Criei um backport, testado no Python 2.5+, provavelmente pode ser facilmente feito para trabalhar no Python 2.4:

https://github.com/cool-rr/garlicsim/blob/master/garlicsim/garlicsim/general_misc/infinity.py

Outras dicas

Solte o longo caminho ou o caminho curto funciona bem para mim:

$ python2.4 -c "print float('inf')+200"
inf
$ python2.5 -c "print float('inf')+200"
inf
$ python2.5 -c "print float('infinity')+200"
inf
$ python2.4 -c "print float('infinity')+200"
inf

o -c A bandeira significa "executar os seguintes argumentos como um comando python".

PEP754 (que foi rejeitado) menciona seu problema sobre os valores especiais do IEEE-754. Sugere usar algo como 1e300000 Para gerar um excesso de ponto flutuante e criar inf, mas observa que isso é feio e não é garantido por ser portátil.

Você deve ser capaz de fingir, dando ao Python uma constante de ponto flutuante suficientemente grande. Por exemplo:

>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True

o decimal O módulo está disponível desde o Python 2.4 e suporta decimais infinitos positivos ou negativos. Nem sempre se comporta como um flutuador (por exemplo, adicionar um decimal e um flutuador não é suportado), mas faz a coisa certa para comparação, o que foi bom o suficiente para mim.

>>> decimal.Decimal('Infinity') > 1e300
True

Emprestando Numpy para algumas linhas:

import numpy as np

inf = float(np.inf)

Aqui, inf é um Python regular float, então você não precisa se preocupar mais com Numpy.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top