我试图找到这个结果的原因:
import numpy
result1 = numpy.rint(1.5)
result2 = numpy.rint(6.5)
print result
输出:
result1-> 2
result2-> 6
这很奇怪: result1 是正确的但我 result2 不是(它必须是7因为 rint 将任何浮动舍入到{{ 3}})。
有什么想法吗? (谢谢!)
答案 0 :(得分:7)
来自numpy's documentation on numpy.around
, equivalent to numpy.round
,据称也与numpy.rint
相关:
对于正好在舍入小数值之间的值,Numpy 舍入到最接近的偶数值。因此1.5和2.5轮到2.0,-0.5 由于这个原因,结果也可能是令人惊讶的 IEEE浮点中小数部分的不精确表示 标准[R9]和以10的幂进行缩放时引入的错误。
同样相关:虽然对于大数字可能存在表示错误,但对于小值,半整数在二进制基础浮点中可以精确表示,特别是1.5
和6.5
在标准单个中是完全可表示的-precision漂浮。如果没有奇数,偶数,低位,高位整数或任何其他方案的偏好,那么这里就会有未定义的行为。
正如@wim在评论中指出的那样,Python的内置round
的行为是不同的。它远离零:它更喜欢正整数的上整数和负输入的较低整数。 (见http://docs.python.org/2/library/functions.html#round)
答案 1 :(得分:0)
我认为这是拇指的规则 - 当你在两个整数之间有一个浮点数时,就像1.5位于1到2之间的中间位置,因为两个选项同样好,所以我们更喜欢舍入到偶数(这是2在这种情况下)和6.5,它位于6到7的中间,6是最接近的偶数。