Numpy四舍五入异常:特定数值舍入结果不符预期
numpy.round舍入异常的原因解析
这个问题的核心不是numpy.round的错误,而是浮点数的二进制存储精度限制导致的:
- 你输入的数值
121921117.714999988675115,作为64位浮点数(Python默认的浮点数类型)存储时,无法精确对应你输入的十进制字面量。因为十进制小数大多无法用有限位二进制小数精确表示,实际存储的二进制浮点数对应的十进制值更接近121921117.71499997。 - numpy.round直接基于底层存储的二进制浮点数进行舍入计算,所以得到的结果是
121921117.71499997,这是符合其计算逻辑的。 - Python内置的
round函数在处理时,对浮点数的十进制表示做了额外的兼容优化,结果更贴近我们的十进制直觉,但本质上也是基于浮点数的近似特性,并非真正解决了精度问题。
验证初始值的实际存储:
x = 121921117.714999988675115 print(x) # 输出:121921117.71499997
从输出就能看到,这个值在内存中已经被近似,numpy.round的结果正是基于这个近似值计算的。
内容的提问来源于stack exchange,提问作者Ivan R
相关产品推荐
相关产品推荐

