先来介绍一下常见的四舍五入,四舍五入其实是把[0,10)这个区间分成了[0,5)和[5,10)两个区间,这两个区间长度相同,所以如果随机取一个数,落在这两个区间上的概率是相等的,所以这其实是一种非常公平的舍入规则,并不存在不科学的情况,但在实际情况下,四舍五入其实是会把数值估计大的,而四舍六入五成双则会更加科学,接下来笔者尝试解释一下为什么这种舍入算法会更科学。
首先先来看四舍六入五成双的规则:
- 若拟舍弃数最高位小于5,舍去
- 若拟舍弃数最高位大于5,进一
- 若拟舍弃数最高位等于5,若5后面还有非0数,则进一,否则则分情况讨论
- 舍弃位的前一位是奇数则进位
- 舍弃位的前一位是偶数则舍弃
首先,四舍六入五成双的规则只是限制了5这一离散的点,其他点依旧是按照四舍五入的规则来做的,所以其实它并没有改变区间长度,或者说我们可以认为[0,5)是舍去,(5,9)则进位,5则分情况讨论,进位和舍去的区间长度也是一样的,所以从常理来说他也是科学的。
但为什么要对5这一离散量作出限制呢?为什么四舍五入会把数值估计大呢?
我们先来回答为什么四舍五入会把数据估计大,现实中我们用到的大多数是离散量,我们看下面这一组离散的数,这组数据的平均值为0.45,我们先对这一组数进行四舍五入舍入,四舍五入后的平均值为0.5,我们会发现他的平均值比原始数据更大
0.0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
我们再来验证一组数据的平均值为1.45,而四舍五入后平均值为1.5,我们发现这也一样把数值估计大了
1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 | 1.9 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 |
我们可以总结出更一般的规律,(a+0.0)+(a+0.1)+a+0.2)+(a+0.3)+(a+0.4)+(a+0.5)+(a+0.6)+(a+0.7)+(a+0.8)+(a+0.9) = 10a+4.5<10a+5 =a+a+a+a+a+(a+1)+(a+1)+(a+1)+(a+1) +(a+1)
综上,我们发现,对于这样一组离散的量,四舍五入确实会导致数值变大,我们来分析其数值变大的原因
我们以下面这组数据为例
0.0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 |
---|
我们发现,0.0舍弃掉0之后,其实是不会产生误差的,所以会产生误差的只有0.1~0.9,我们对这些数一一分组
0.1退位产生的误差可以和0.9进位产生的误差抵消
0.2退位产生的误差可以和0.8进位产生的误差抵消
依次类推,我们发现,0.1~0.4产生的误差均可以被0.9~0.6产生的误差消掉,但是唯独0.5的误差我们消不掉,所以如果将0.5直接进1肯定会产生误差,将原来的数据估计大。
接下来回答如何解决这个问题,由于0.5我们是无法用其他数字将他的误差抵消掉的,所以我们就考虑把0.5分为两种情况,一种情况舍去,一种情况进位,这两种情况出现的概率均为50%,这样就可以让舍去的那部分抵消掉进位的那部分误差,所以就有了五成双的规则,很显然,当要舍去位为5时,他的前一位要么是偶数,要么是奇数,这两种情况的概率均为50%,所以当前面的位数为奇数,就进位,此时会将整体数值估计大,而当前面的数为偶数,就会舍去,此时又会将整体数值估计小,这二者可以相互抵消,也就消除了误差。