如何得到一个浮点无穷大,乘以零得到零

时间:2016-03-15 15:59:21

标签: python floating-point infinity

如何获得足够小的无穷大,其零乘积为零?

我使用Python的整数编程求解器,我的一些变量有无限的成本。我无法使用float('inf')因为float('inf')*0 = NaN

3 个答案:

答案 0 :(得分:5)

您可以使用float可容纳的最大有限数:

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

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

答案 1 :(得分:2)

不是寻找不存在的“较小的无穷大”,而是可以更容易地捕获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 

答案 2 :(得分:1)

NAN不是零。你可以使用numpy检查NAN值并将其转换为零。

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