首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有些语言会舍入最接近的偶数?

为什么有些语言会舍入最接近的偶数?
EN

Software Engineering用户
提问于 2014-09-14 15:34:13
回答 2查看 7.1K关注 0票数 47

编程语言,如Scheme (R5RS)和Python (见这个问题),当值恰好位于周围整数之间时,就会向最近的偶数方向旋转。

这背后的原因是什么?

是否有一种数学思想能使下列计算更容易推理?

(R5RS引用IEEE浮点标准作为此行为的来源。)

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-09-15 08:51:23

不久前,我构建了一个连续四舍五入的测试程序,因为它基本上是对舍入算法的最坏的压力测试。

对于从0到9,999的每一个数字,它第一轮到最近的10,然后到最近的100,然后到最近的1000。(你也可以认为,在[0,1]中的10,000点被四舍五入到3位,然后是2,然后是1。)这组数字的平均值为4999.5。

如果使用“四舍五入”方法完成所有三次循环,则结果如下(第一列是四舍五入的结果,第二列是对该结果四舍五入的数--即直方图)。

代码语言:javascript
复制
0     445
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 555

结果与一个“四舍五入”的结果不同,在10,000次中,最接近的1,000次为1,5550次,平均四舍五入值为5055次(比原来的平均值高出55.5次)。

如果所有三次圆都是用“半圆下降”来完成的,那么结果是:

代码语言:javascript
复制
0     556
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 444

这一结果与单轮下降一半的结果不同,在10,000次中,有1,000次降至最近的1,550次,且舍入值和平均值为4944次(太低,为55.5次)。

如果所有三个圆都是用“圆形半奇数”来完成的,则结果是:

代码语言:javascript
复制
0     445
1000  1111
2000  889
3000  1111
4000  889
5000  1111
6000  889
7000  1111
8000  889
9000  1111
10000 444

结果与单个“圆形半奇数”不同,在10,000次中,最接近的5,550次,平均四舍五入值为4999.5 (正确)。

最后,如果使用“圆形半平”完成所有三个圆,则结果如下:

代码语言:javascript
复制
0     546
1000  909
2000  1091
3000  909
4000  1091
5000  909
6000  1091
7000  909
8000  1091
9000  909
10000 1091

这一结果不同于单个“圆形半平”,即每10,000次中最接近的1,450次,平均舍入值为4999.5 (正确)。

我认为很明显,四舍五入对四舍五入值有偏差,所以四舍五入值的平均值不再与原始值的平均值相同,而“四舍五入”和“四舍五入”消除了偏倚,用另一半的方式和另一半的方式处理。连续四舍五入会使偏差相乘。

圆半偶数和圆半奇向分布引入了各自的偏差:分别对偶数位和奇数位的偏倚。在这两种情况下,同样,这种偏差被乘以连续四舍五入,但是对于四舍五入来说更糟糕。我认为这个例子的解释很简单:5是奇数,所以整半奇数的结果比整半偶数有更多的结果,因此,在下一次四舍五入时必须特别处理的结果更多。

因此,不管怎么说,在这四种选择中,只有两种是无偏的,而在这两种无偏的选择中,循环一半甚至在重复四舍五入的情况下给出了最优的分布。

票数 40
EN

Software Engineering用户

发布于 2014-09-14 16:09:14

这叫做银行家的四舍五入。这样做的目的是将许多舍入操作的累积误差降到最低。

让我们假设你总是把.5四舍五入。想想那些小小的利息,银行每次赚半美分.

比方说,你总是把.5加起来。会计会尖叫,因为你支付的利息比你应该支付的多。

票数 57
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/256265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档