Обратный перенос float(“inf”) в Python 2.4 и 2.5
Вопрос
Я переношу свой проект с Python 2.6 на Python 2.4 и 2.5.В своем проекте я использовал float("inf")
, и теперь я нахожу, что он недоступен на Python 2.5.Есть ли у него резервная копия?
Решение 4
Я создал бэкпорт, протестированный на Python 2.5+, и, вероятно, его можно легко заставить работать на Python 2.4:
https://github.com/cool-RR/GarlicSim/blob/master/garlicsim/garlicsim/general_misc/infinity.py
Другие советы
Написание этого слова либо длинным, либо коротким способом для меня прекрасно работает:
$ 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".
ПЕП754 (который был отклонен) упоминает вашу проблему о специальных значениях IEEE-754.Он предлагает использовать что-то вроде 1e300000
чтобы сгенерировать переполнение с плавающей запятой и создать inf
, но он отмечает, что это некрасиво и не гарантирует переносимости.
Вы сможете подделать это, предоставив вместо этого Python достаточно большую константу с плавающей запятой.Например:
>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True
Тот самый десятичная дробь модуль доступен начиная с Python 2.4 и поддерживает положительные или отрицательные бесконечные десятичные дроби.Он не всегда ведет себя как поплавок (например.добавление десятичной дроби и числа с плавающей точкой не поддерживается), но делает правильную вещь для сравнения, которая была достаточно хороша для меня.
>>> decimal.Decimal('Infinity') > 1e300
True
Заимствование NumPy на несколько строк:
import numpy as np
inf = float(np.inf)
Здесь, inf
это обычный питон float
, так что вам больше не нужно возиться с NumPy.