簡體   English   中英

向后移植float(“ inf”)到Python 2.4和2.5

[英]Backporting float(“inf”) to Python 2.4 and 2.5

我將項目從Python 2.6反向移植到Python 2.4和2.5。 在我的項目中,我使用了float("inf") ,現在發現它在Python 2.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類的1e300000來生成浮點溢出並創建inf ,但它確實指出這很丑陋並且不能保證可移植。

您應該能夠通過給Python提供足夠大的浮點常量來偽造它。 例如:

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

自Python 2.4起, 十進制模塊可用,並支持正或負無限小數。 它的行為並不總是像浮點數一樣(例如,不加小數點和不支持浮點數),但是可以做正確的比較,對我來說已經足夠了。

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

我創建了一個在Python 2.5+上測試過的backport,可以很容易地使其在Python 2.4上工作:

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

借用NumPy幾行:

import numpy as np

inf = float(np.inf)

在這里, inf常規的python float ,因此您無需再為NumPy煩惱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM