![]() |
1
3
也可参考 What Every Programmer Should Know About Floating-Point Arithmetic ,其中有更详细的解释说明了为什么会发生这种情况。
所以这个数字不完全在两个小数之间,它实际上更接近于0.49312,而不是0.49313,所以它肯定会四舍五入到0.49312,这点很清楚。 问题是当你乘以10 5个 ,你会得到确切的数字49312.5。所以这里发生的是乘法给了你一个 不精确结果 巧合 取消了原始数字中的舍入误差。两个舍入错误互相抵消了,耶!但问题是,当你这样做的时候,四舍五入实际上是不正确的。。。至少如果你想绕过去 向上的
摘要在Python 2中,
在这两种情况下,0.493125是 写0.4931249999999998001598555674718227237462974365234375只是很短的一段路。
我认为有两种可能的方法
而Python选择。。。选项1!完全正确,但实现版本要困难得多。参考 Objects/floatobject.c:927 double_round() . 它使用以下过程:
它使用基于
David Gay's dtoa library
. 如果您希望C++代码得到
像Python一样,这是一个好的开始。幸运的是你可以包括
|
![]() |
2
0
和的Python文档 2.7 指定行为:
3.7 :
更新:
(cpython)实现
can be found
floatobjcet.c
在函数中
要获得精确的算法,请查看链接的源文件。 |
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |