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.
加载中,请稍侯......
精彩评论