为什么 np.nextafter(0, 1) 不等于 float64 epsilon 值?

qai*_*sjp 0 python floating-point numpy scipy

这很奇怪!

np.nextafter 返回 0 之后的最小数字。这不应该等于 float64 epsilon 吗?

In [25]: np.nextafter(0, 1).dtype == np.finfo(np.float64).eps.dtype
Out[25]: True

In [26]: np.nextafter(0, 1) < np.finfo(np.float64).eps
Out[26]: True
Run Code Online (Sandbox Code Playgroud)

War*_*ser 5

float64 epsilon 是相对于 1.0 计算的。它不是64 位浮点中可表示的最小正数。

要使用 找到它np.nextafter(),请使用np.nextafter(1, 2) - 1

In [215]: np.nextafter(1, 2) - 1
Out[215]: 2.220446049250313e-16

In [216]: np.finfo(np.float64).eps
Out[216]: 2.220446049250313e-16
Run Code Online (Sandbox Code Playgroud)