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



如何得到一个"足够小"的无穷大,其零乘积为零?

我正在使用 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

与其寻找不存在的"较小的无穷大",不如捕获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 

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

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

最新更新