IEEE浮点数向偶数舍

CSAPP

​ 向偶数舍入初看上去好像是个相当随意的目标——有什么理由偏向取偶数呢?为什么不始终把位于两个可表示的值中间的值都向上舍入呢?使用这种方法的一个问题就是很容易假想到这样的情景:这种方法舍入一组数值,会在计算这些值的的平均数中引入统计偏差。我们采用这种方法舍入一组数的平均值将比这些数本身旳平均值略高一些。相反,如果我们总是把两个可表示值中间的数字向下舍入,那么舍入出的一组数的平均值将比这些数本身的平均值略低一些。向偶数舍入在大多数现实情况中避免了这种统计偏差。在50%的时间里,它将向上舍入,而在50%的时间里,它将向下舍入。

如何向偶数舍入

要点

  • 只有在两个 可表示的数中间的数才会进行 偶数舍入
  • 其余情况为,舍入到靠近的那个 *可表示的数

十进制

舍入到小数点后两位

  • 1.2349999舍入为 1.23 1.2350001舍入为 1.24
  • 因为它们不是 1.231.24的正 *中间

  • 1.2350000 舍入为 1.24 1.2450000舍入为 1.24

  • 因为前者处于 1.231.24的正 中间,后者处于 1.241.25的正 中间,且4为 *偶数

二进制

舍入到小数点后两位

两个二进制数的正 中间

  1. 现在是舍入到小数点 后两位,那么我们看从小数点 后三位开始的数字,就叫它 多余数字
  2. 多余数字正好为 100000000...时,它的大小是正好是上一位为1所代表的数的一半,也就是说,在正 中间
  3. 多余数字第一位为0,比如 01001001000...,它小于 中间值,所以向下舍入
  4. 多余数字第一位为1,且其他位还有1,比如 10000010001...,它大于 中间值,所以向上舍入

二进制小数的偶数

我们将最低有效位的值为0认为是偶数,1认为是奇数

  • 10.00011舍入为 10.00 10.00110舍入为 10.01
  • 因为它们不是 10.0010.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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球