为什么有些语言会四舍五入到最接近的偶数整数?


44

当值恰好在周围整数之间时,Scheme(R5RS)和Python(请参见此问题)之类的编程语言会向最接近的偶数整数取整。

这背后的原因是什么?
是否有一个数学思想可以简化以下计算的推理?

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



1
IEEE允许多种舍入模式。这就是其中之一。有些语言甚至允许在执行期间更改舍入模式。
Tobias Brandt 2014年

5
您不妨阅读“ 打破平局”部分,以了解Wikipedia及其背后的关联推理。


1
“尽管精确是讨论浮点数的问题”,这不是讨论的问题,而是非常精确地指定的。例如,此处相关的数字(如42.5)可以精确表示,因为它们是二进制分数。不能精确表示的是二进制以外的分数,包括十进制分数。
2014年

Answers:


39

前一阵子,我构建了一个用于连续取整的测试程序,因为它基本上是用于取整算法的最坏情况下的压力测试。

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

如果使用“四舍五入”方法完成所有三个舍入,则结果如下(第一列是舍入结果,第二列是对该结果舍入了多少个数字,即它是直方图)。

0     445
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 555

结果从一次“四舍五入”到每10,000中最接近的一千五百五十次不等,平均舍入值为5055(比原始平均值高55.5)。

如果通过“四舍五入”完成所有三个舍入,则结果为:

0     556
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 444

结果从单个“向下取整”到10,000中的最接近的一千五百五十次不同,并且平均取整值为4944(太低了55.5)。

如果所有三个舍入均使用“四舍五入”进行,则结果为:

0     445
1000  1111
2000  889
3000  1111
4000  889
5000  1111
6000  889
7000  1111
8000  889
9000  1111
10000 444

结果从一个“四舍五入的奇数”到10,000中最接近的一千五百五十次不等,平均舍入值为4999.5(正确)。

最后,如果所有三个舍入均使用“半舍入”进行,则结果为:

0     546
1000  909
2000  1091
3000  909
4000  1091
5000  909
6000  1091
7000  909
8000  1091
9000  909
10000 1091

结果从一个“四舍五入”到10,000中最接近的千次450次,平均舍入值为4999.5(正确)。

我认为很明显,向上舍入和向下舍入都会使舍入值产生偏差,因此舍入值的平均值不再具有与原始值的平均值相同的期望,并且“舍入为偶数”和“舍入为奇数”消除偏见的方法是,一半时间一次处理5,另一半时间另一种方法。连续的舍入会增加偏差。

四舍五入的偶数和四舍五入的奇数会给分布带来自己的偏差:分别偏向偶数和奇数。同样,在这两种情况下,此偏差都会乘以连续的舍入,但是对于舍入为奇数的情况则更糟。我认为这种情况下的解释很简单:5是一个奇数,因此,半数奇数的结果以5结尾比偶数半数更多,因此,更多的结果将需要在下一个舍入中专门处理。

因此,无论如何,在这四个选择中,只有两个是无偏的,在这两个无偏的选择中,如果经过反复四舍五入,则舍入的一半甚至会表现出最佳的分布。


55

这称为银行家四舍五入。这样做的目的是使许多舍入操作产生的累积误差最小。

假设您总是四舍五入。想想所有这些很少的利息支出,银行每次赚五分钱。

假设您总是四舍五入。会计将大声疾呼,因为您支付的利息超出了您应有的水平。


6
但是为什么偶而不奇?
棘手怪胎2014年

17
@ratchetfreak-这么小的数字四舍五入到零,而不是远离零。除此之外,它是任意的-必须是某些东西。
乔纳森·杜尔西

15
@ratchetfreak:如果您从数字1开始,除以2,然后四舍五入为奇数,将会发生什么?您将0.5舍入为1。如果再次除以2,该怎么办?您将0.5舍入为1。依此类推。永不为零。
gnasher729 2014年

13
我认为偶数也比奇数更可取,因为它们降低了随后进行四舍五入难题的可能性。在实际中,将(精确地)除以二是相当频繁的操作。
马克·范·吕文

4
这在统计中也很重要。如果将数据集的每个小数部分四舍五入,则诸如均值之类的描述性统计数据将比四舍五入的情况高(略)。肯尼斯·罗斯曼(Kenneth Rothman)的《流行病学导论》特别提到,始终将四舍五入到0.5(或.005,或其他数值),因为逐渐将数据库偏向更高的数字,但始终四舍五入到偶数或奇数不会偏向平均值。
Will Murphy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.