开发者

Backporting float("inf") to Python 2.4 and 2.5

I'm backporting my proj开发者_如何学编程ect from Python 2.6 to Python 2.4 and 2.5. In my project I used float("inf"), and now I find it is unavailable on Python 2.5. Is there a backport of it?


Spelling it either the long way or the short way works fine for me:

$ 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

The -c flag means "execute the following arguments as a Python command."

PEP754 (which was rejected) does mention your issue about special IEEE-754 values. It suggests using something like 1e300000 to generate a floating point overflow and create inf, but it does note that this is ugly and not guaranteed to be portable.


You should be able to fake it up by giving Python a sufficiently large floating point constant instead. For instance:

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


The decimal module is available since Python 2.4 and supports positive or negative infinite decimals. It does not always behave like a float (eg. adding a decimal and a float is not supported) but does the right thing for comparison, which was good enough for me.

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


I created a backport, tested on Python 2.5+, can probably be easily made to work on Python 2.4:

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


Borrowing NumPy for a few lines:

import numpy as np

inf = float(np.inf)

Here, inf is a regular python float, so you don't need to bother with NumPy any further.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜