3

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

4

5 回答 5

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

于 2009-10-10T15:52:12.480 回答
2

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

>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True
于 2009-10-10T16:36:17.710 回答
1

从Python 2.4 开始提供decimal模块,支持正数或负数无限小数。它的行为并不总是像浮点数(例如,不支持添加小数和浮点数),但可以进行正确的比较,这对我来说已经足够了。

>>> decimal.Decimal('Infinity') > 1e300
True
于 2011-02-27T04:20:46.807 回答
0

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

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

于 2011-02-28T11:30:30.370 回答
0

借用 NumPy 几行:

import numpy as np

inf = float(np.inf)

这里inf是一个普通的 pythonfloat,所以你不需要再为 NumPy 操心了。

于 2012-02-01T08:46:56.570 回答