如何在np.float64中找到任意数字的下一个或上一个数字?

时间:2019-09-09 04:23:12

标签: python python-3.x numpy floating-point

我可以说这些吗?

  • (1 - np.finfo(np.float64).epsneg)*xx中任何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

1 个答案:

答案 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.infnp.inf。例如,大于4.3的第一个浮点数是

In [6]: np.nextafter(4.3, np.inf)                                                                                
Out[6]: 4.300000000000001