Backporting float ("inf") для Python 2.4 и 2.5 - PullRequest
3 голосов
/ 10 октября 2009

Я перенесу свой проект с Python 2.6 на Python 2.4 и 2.5. В своем проекте я использовал float("inf"), и теперь я нахожу его недоступным на Python 2.5. Есть ли у него бэкпорт?

Ответы [ 5 ]

5 голосов
/ 10 октября 2009

Написание слова «длинный или короткий путь» прекрасно работает для меня:

$ 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

Флаг -c означает «выполнить следующие аргументы как команду Python».

PEP754 (который был отклонен) упоминает вашу проблему со специальными значениями IEEE-754. Он предлагает использовать что-то вроде 1e300000 для генерации переполнения с плавающей запятой и создания inf, но он отмечает, что это некрасиво и не гарантированно будет переносимым.

2 голосов
/ 10 октября 2009

Вы должны иметь возможность подделать его, задав вместо этого Python достаточно большую константу с плавающей запятой. Например:

>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True
1 голос
/ 27 февраля 2011

Модуль decimal доступен начиная с Python 2.4 и поддерживает положительные или отрицательные бесконечные десятичные дроби. Он не всегда ведет себя как число с плавающей точкой (например, добавление десятичной дроби и число с плавающей точкой не поддерживается), но делает правильные вещи для сравнения, что для меня было достаточно.

>>> decimal.Decimal('Infinity') > 1e300
True
0 голосов
/ 01 февраля 2012

Заимствование NumPy на несколько строк:

import numpy as np

inf = float(np.inf)

Здесь inf - это обычный питон float, поэтому вам не нужно больше беспокоиться о NumPy.

0 голосов
/ 28 февраля 2011

Я создал бэкпорт, протестированный на Python 2.5+, и, вероятно, его можно легко заставить работать на Python 2.4:

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

...