如何获得乘以零得到零的浮点无穷大
How to get a floating point infinity that when multiplied by zero gives zero
如何得到一个 "small enough" 无穷大,它与零的乘积为零?
我正在为 Python 使用整数规划求解器,我的一些变量具有无限成本。我不能使用 float('inf')
因为 float('inf')*0 = NaN
与其寻找不存在的 "smaller infinity",不如捕获 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
您可以使用 float
可以容纳的最大有限数:
In [9]: print sys.float_info.max
1.79769313486e+308
In [10]: sys.float_info.max * 0
Out[10]: 0.0
NAN 不为零。你可以使用 numpy 检查 NAN 值并将其转换为零。
from numpy import isnan
result = 0 if isnan(result) else result
如何得到一个 "small enough" 无穷大,它与零的乘积为零?
我正在为 Python 使用整数规划求解器,我的一些变量具有无限成本。我不能使用 float('inf')
因为 float('inf')*0 = NaN
与其寻找不存在的 "smaller infinity",不如捕获 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
您可以使用 float
可以容纳的最大有限数:
In [9]: print sys.float_info.max
1.79769313486e+308
In [10]: sys.float_info.max * 0
Out[10]: 0.0
NAN 不为零。你可以使用 numpy 检查 NAN 值并将其转换为零。
from numpy import isnan
result = 0 if isnan(result) else result