概述
我说的可能比较啰嗦,但看完相信都能理解了
现在计算机中的浮点表示及运算普遍采用IEEE 754标准,该标准默认的舍入方式是向偶数舍入(round-to-even),也称为向最接近的值舍入(round-to-nearest)。
向偶数舍入有两个原则,一是向最接近的值舍入,再一个是当处在"中间值"时看有效数值是否是偶数,如果是偶数则直接舍去不进位,如果是奇数则进位。
先拿几个十进制的举例,再看二进制的。比如以下几个十进制都要求舍入到个位:1.4和1.6,所谓的"中间值"就是,比如1.4,因为是舍入到个位,所以它处在1和2之间,那中间值就是(1+2)/2=1.5。那么1.4就不是中间值,根据向最接近的值舍入的原则1.4跟1更近,所以舍入得到1。同理,1.6舍入得到2。再看1.5和2.5:根据上述可知,1.5和2.5都是中间值,那么就要看有效数字是否是偶数,1.5的有效数字是1,是奇数,所以要进位得到2;而2.5的有效数字是2,所以直接舍去不进位得到2。
上面说的方法根据"中间值"来进行舍入是从概念中抽取的方法,还有个方法我觉得更简便。为了说明这个方法,以及不混淆概念,我引入一个"半值"叫法(我自己心里这么叫而已,业界应该没有这说法,大家根据自己情况觉得怎么好记就怎么叫吧)。"半值"是这么算的:看有效数字后面的数值有多少位,假设有n位,则半值为"(基数^n)/2"。比如1.4,有效数字后面是4,1位数字,十进制的基数是10,那么半值为(10^1)/2=5。拿有效数字后面的数值跟半值比较,大则进,小则舍,半值就看有效数字奇偶,奇则进,偶则舍。比如,1.4的4比半值5小,所以直接舍去得1,而若是1.6的6比半值5大则要进1得2。1.5的5是半值,看有效数字1是奇数,则进位得2;2.5的5是半值,看有效数字2是偶数,则直接舍去得2。再比如,如果是1.48,同样舍入到个位,48是2位数字,那么半值为(10^2)/2=50,48比50小,直接舍去得1。或者还可以更简单的,比如1.48,先只看有效数字的后一位4,一个十进制位权值是10,10/2=5,然后1.48的48有两位,拿“5”也补足两位得“50”,所以半值就是50。
二进制也是同样的道理,二进制的基数是2,半值就这么算(2^n)/2,然后二进制的奇偶判断看最有效位,0则偶,1则奇。
二进制10.010,舍入到小数点下一位,那么看有效数字后面的数字是10,半值(2^2)/2=2=二进制的10,正好是半值,那么看有效数字是10.0,是偶数,所以直接舍去得10.0。再看10.011,半值同样是10,而有效数字后面的11比10大则直接进位得10.1。再看10.110,半值同样是10,有效数字后面的10正好是半值,看有效数字10.1是奇数,那么要进1位,得11.0。
最后
以上就是沉静滑板为你收集整理的向偶数舍入的全部内容,希望文章能够帮你解决向偶数舍入所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复