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