向Microsoft 2.4和2.5反向移植浮点(“inf”)

时间:2009-10-10 15:49:12

标签: python infinity backport

我正在将我的项目从Python 2.6移植到Python 2.4和2.5。在我的项目中,我使用了float("inf"),现在我发现它在Python 2.5上不可用。它有一个后端吗?

5 个答案:

答案 0 :(得分:5)

对我来说,无论是漫长的还是短路都可以解决它:

$ 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,但它确实注意到这很难看并且不能保证是可移植的。

答案 1 :(得分:2)

你应该能够通过给Python一个足够大的浮点常数来伪造它。例如:

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

答案 2 :(得分:1)

decimal模块自Python 2.4起可用,并支持正或负无限小数。它并不总是像浮点数一样(例如,添加小数和浮点数不支持)但是做正确的比较,这对我来说已经足够了。

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

答案 3 :(得分:0)

我创建了一个在Python 2.5+上测试的backport,很可能很容易在Python 2.4上工作:

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

答案 4 :(得分:0)

借用NumPy几行:

import numpy as np

inf = float(np.inf)

此处infregular python float,因此您无需再为NumPy打扰。