小编典典

用numpy.rint()舍入到最接近的int与.5不一致

python

numpy的roundint似乎与xxx.5的处理方式不一致

In [2]: np.rint(1.5)
Out[2]: 2.0

In [3]: np.rint(10.5)
Out[3]: 10.0

1.5向上舍入,而10.5向下舍入。是否有一个原因?浮游物的不准确性是公正的吗?

编辑

有没有办法在n.5被四舍五入即n =偶数或奇数都等于n + 1的情况下获得所需的功能?


阅读 351

收藏
2021-01-20

共1个答案

小编典典

因此,这种行为(如注释中所述)是一种非常传统的四舍五入形式,在“舍入”法中可以看到。也被称为(根据David
Heffernan)银行家的四舍五入。有关numpy此行为的文档暗示他们正在使用这种舍入,但也暗示numpy与IEEE浮点格式进行交互的方式可能存在问题。(如下所示)

Notes
-----
For values exactly halfway between rounded decimal values, Numpy
rounds to the nearest even value. Thus 1.5 and 2.5 round to 2.0,
-0.5 and 0.5 round to 0.0, etc. Results may also be surprising due
to the inexact representation of decimal fractions in the IEEE
floating point standard [1]_ and errors introduced when scaling
by powers of ten.

老实说,是否如此。我确实知道numpy内核的大部分仍然是用FORTRAN 77编写的,该版本早于IEEE标准(于1984年制定),但是我对FORTRAN
77的了解不足以说明这里的接口是否存在问题。

如果您只是想四舍五入,则该np.ceil函数(通常为天花板函数)将执行此操作。如果您要寻找相反的内容(总是四舍五入),则该np.floor函数将实现此目的。

2021-01-20