2016-03-15 99 views
2

如何獲得一個足夠小的無窮大,使其零點乘積爲零?如何獲得當乘以零時的浮點無窮大給出零

我正在Python工作,我正在使用一個整數規劃解算器,其中一些變量具有無限的成本。我不能使用float('inf'),因爲float('inf')*0 = NaN

+0

「無限成本」聽起來像是要約束他們等於零... – tmyklebu

回答

3

你可能會使用最大的有限數量的float可容納:

In [9]: print sys.float_info.max 
1.79769313486e+308 

In [10]: sys.float_info.max * 0 
Out[10]: 0.0 
+1

這是一個聰明的解決方案。 – kindall

1

而不是尋找一個「更小的無窮大」,它不存在,它可能更容易陷入NaN並用零代替它。要做到這一點,你可以使用NaN不等於任何浮點值,即使它本身也是如此。這種方法很方便,因爲通常可以在計算鏈的末尾使用它(因爲NaN將級聯並使結果全部爲NaN)。

possible_inf = float("+inf") 
result = possible_inf * 0 
result = result if result == result else 0 

你也可以只爲無限本身早些時候陷阱:

possible_inf = float("+inf") 
result = 0 if abs(possible_inf) == float("+inf") else possible_inf * 0 
+1

IEEE無窮的754表示是一個簡單的位模式,不是一個數字的表示。算術運算總會給NaN。 – JYA

0

NAN不爲零。你可以使用numpy來檢查NAN值並將其轉換爲零。

from numpy import isnan 
result = 0 if isnan(result) else result 
+2

或['math.isnan'](https://docs.python.org/2/library/math.html#math.isnan)。 –