我什么时候应该担心 numpy 值下溢?

Sha*_*ang 4 python numpy underflow

我正在使用 Python numpy 进行计算。这是生成的 numpy 数组:

[  5.15054786e-11   5.15251385e-11   5.15262922e-11 ...,   5.21100674e-11
5.21097550e-11   5.21088179e-11]
Run Code Online (Sandbox Code Playgroud)

这些都非常小。在什么时候我应该担心计算中的下溢?这些需要超精确。是否有一个明确的值范围需要担心,或者是否有一个说明该值的参考?

Jai*_*ime 6

64 位浮点数中可表示的最小正常数是:

>>> 2**-1022
2.2250738585072014e-308
Run Code Online (Sandbox Code Playgroud)

该范围可以使用非正规数进一步扩展,将最小的值缩小为:

>>> 2**(-1022 - 52)
5e-324
Run Code Online (Sandbox Code Playgroud)

但:

>>> 2**(-1022 - 53)
0.0
Run Code Online (Sandbox Code Playgroud)

另一个相关的小数字(同样适用于 64 位数字)是:

>>> 2**-52
2.220446049250313e-16
Run Code Online (Sandbox Code Playgroud)

因为:

>>> 1 + 2**-52
1.0000000000000002
Run Code Online (Sandbox Code Playgroud)

但:

>>> 1 + 2**-53
1.0
Run Code Online (Sandbox Code Playgroud)