用numpy.rint()舍入到最接近的int与.5不一致
numpy的round
int似乎与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的情况下获得所需的功能?
-
因此,这种行为(如注释中所述)是一种非常传统的四舍五入形式,在“半舍入”法中可以看到。也被称为(根据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
函数将实现此目的。