在什么时候我应该担心 numpy 值的下溢?
At what point should I worry about underflow in numpy values?
我正在使用 Python numpy 进行计算。这是生成的 numpy 数组:
[ 5.15054786e-11 5.15251385e-11 5.15262922e-11 ..., 5.21100674e-11
5.21097550e-11 5.21088179e-11]
那些很小。在什么时候我应该担心计算中的下溢?这些需要非常精确。是否有一个确定的值范围需要担心,或者是否有一个说明该值的参考?
64位浮点数中可表示的最小normal number为:
>>> 2**-1022
2.2250738585072014e-308
可以使用 denormal numbers 将范围扩大一点,将最小值缩小到:
>>> 2**(-1022 - 52)
5e-324
但是:
>>> 2**(-1022 - 53)
0.0
另一个相关的小数字(同样适用于 64 位数字)是:
>>> 2**-52
2.220446049250313e-16
因为:
>>> 1 + 2**-52
1.0000000000000002
但是:
>>> 1 + 2**-53
1.0
我正在使用 Python numpy 进行计算。这是生成的 numpy 数组:
[ 5.15054786e-11 5.15251385e-11 5.15262922e-11 ..., 5.21100674e-11
5.21097550e-11 5.21088179e-11]
那些很小。在什么时候我应该担心计算中的下溢?这些需要非常精确。是否有一个确定的值范围需要担心,或者是否有一个说明该值的参考?
64位浮点数中可表示的最小normal number为:
>>> 2**-1022
2.2250738585072014e-308
可以使用 denormal numbers 将范围扩大一点,将最小值缩小到:
>>> 2**(-1022 - 52)
5e-324
但是:
>>> 2**(-1022 - 53)
0.0
另一个相关的小数字(同样适用于 64 位数字)是:
>>> 2**-52
2.220446049250313e-16
因为:
>>> 1 + 2**-52
1.0000000000000002
但是:
>>> 1 + 2**-53
1.0