CSAPP
向偶数舍入初看上去好像是个相当随意的目标——有什么理由偏向取偶数呢?为什么不始终把位于两个可表示的值中间的值都向上舍入呢?使用这种方法的一个问题就是很容易假想到这样的情景:这种方法舍入一组数值,会在计算这些值的的平均数中引入统计偏差。我们采用这种方法舍入一组数的平均值将比这些数本身旳平均值略高一些。相反,如果我们总是把两个可表示值中间的数字向下舍入,那么舍入出的一组数的平均值将比这些数本身的平均值略低一些。向偶数舍入在大多数现实情况中避免了这种统计偏差。在50%的时间里,它将向上舍入,而在50%的时间里,它将向下舍入。
如何向偶数舍入
要点
- 只有在两个 可表示的数中间的数才会进行 偶数舍入
- 其余情况为,舍入到靠近的那个 *可表示的数
十进制
舍入到小数点后两位
1.2349999
舍入为1.23
1.2350001
舍入为1.24
-
因为它们不是
1.23
和1.24
的正 *中间 -
1.2350000
舍入为1.24
1.2450000
舍入为1.24
- 因为前者处于
1.23
和1.24
的正 中间,后者处于1.24
和1.25
的正 中间,且4为 *偶数
二进制
舍入到小数点后两位
两个二进制数的正 中间
- 现在是舍入到小数点 后两位,那么我们看从小数点 后三位开始的数字,就叫它 多余数字
- 当 多余数字正好为
100000000...
时,它的大小是正好是上一位为1所代表的数的一半,也就是说,在正 中间 - 当 多余数字第一位为0,比如
01001001000...
,它小于 中间值,所以向下舍入 - 当 多余数字第一位为1,且其他位还有1,比如
10000010001...
,它大于 中间值,所以向上舍入
二进制小数的偶数
我们将最低有效位的值为0认为是偶数,1认为是奇数
例
10.00011
舍入为10.00
10.00110
舍入为10.01
-
因为它们不是
10.00
和10.01
的中间值 -
10.11100
舍入为11.00
10.10100
舍入为10.10
- 它们的 多余数字均为 中间值,所以进行向 偶数舍入
- 前者最低有效位为1,则进1,使之为0
- 后者最低有效位为0,则舍去 多余数字即可
舍入前 1.01011 1.01100 1.01101 1.01110 1.01111 1.10000 … 1.10100 舍入后 1.01000 1.10000 1.10000 1.10000 1.10000 1.10000 … 1.10000 状态 向下 向偶数 向上 向上 向上 向下 … 向偶数
Original: https://www.cnblogs.com/Az1r/p/16712794.html
Author: 江水为竭
Title: IEEE浮点数向偶数舍
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684118/
转载文章受原作者版权保护。转载请注明原作者出处!