我可以说这些吗?
(1 - np.finfo(np.float64).epsneg)*x
是x
中任何x
的{{1}}前面的数字。float64
是(1 + np.finfo(np.float64).eps)*x
中任何x
的{{1}}之后的数字。如果是,为什么?
还是有更好或正确的方法来找到float64中任何数字的下一个/上一个数字?
我想找到最接近x
且小于float64
的数字。因此尝试了4.3
,如下所示。
4.3
结果是这样的。
4.3 - np.finfo(float).epsneg
因此,我想出了一个候选解决方案print(repr(np.float64(4.3)))
print(repr(np.float64(4.3 - np.finfo(float).epsneg)))
,并进行了尝试。
4.2999999999999998
4.2999999999999998
结果如下。
(1 - np.finfo(float).epsneg)*4.3
答案 0 :(得分:2)
所需的函数称为nextafter
。例如,要查找最接近4.3且低于4.3的浮点数:
In [4]: np.nextafter(4.3, 0)
Out[4]: 4.299999999999999
这些值之间的差异约为8.88e-16:
In [5]: 4.3 - np.nextafter(4.3, 0)
Out[5]: 8.881784197001252e-16
第二个参数指定被认为是“之后”的方向。小于第一个参数的值表示寻找较小的值,而较大的值表示寻找较大的值;可以使用-np.inf
和np.inf
。例如,大于4.3的第一个浮点数是
In [6]: np.nextafter(4.3, np.inf)
Out[6]: 4.300000000000001