如何獲得一個足夠小的無窮大,使其零點乘積爲零?如何獲得當乘以零時的浮點無窮大給出零
我正在Python工作,我正在使用一個整數規劃解算器,其中一些變量具有無限的成本。我不能使用float('inf')
,因爲float('inf')*0 = NaN
如何獲得一個足夠小的無窮大,使其零點乘積爲零?如何獲得當乘以零時的浮點無窮大給出零
我正在Python工作,我正在使用一個整數規劃解算器,其中一些變量具有無限的成本。我不能使用float('inf')
,因爲float('inf')*0 = NaN
你可能會使用最大的有限數量的float
可容納:
In [9]: print sys.float_info.max
1.79769313486e+308
In [10]: sys.float_info.max * 0
Out[10]: 0.0
這是一個聰明的解決方案。 – kindall
而不是尋找一個「更小的無窮大」,它不存在,它可能更容易陷入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
IEEE無窮的754表示是一個簡單的位模式,不是一個數字的表示。算術運算總會給NaN。 – JYA
NAN不爲零。你可以使用numpy來檢查NAN值並將其轉換爲零。
from numpy import isnan
result = 0 if isnan(result) else result
或['math.isnan'](https://docs.python.org/2/library/math.html#math.isnan)。 –
「無限成本」聽起來像是要約束他們等於零... – tmyklebu