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的情况下获得所需的功能?
因此,这种行为(如注释中所述)是一种非常传统的四舍五入形式,在“半舍入”法中可以看到。也被称为(根据David Heffernan)银行家的四舍五入。有关numpy此行为的文档暗示他们正在使用这种舍入,但也暗示numpy与IEEE浮点格式进行交互的方式可能存在问题。(如下所示)
numpy
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函数将实现此目的。
np.ceil
np.floor