1.7 小数的存储

1.7.1 浮点记数法

  以8个位长度的位模式来演示浮点数的表示:

    最高位为符号位,符号位右边3位为指数域,最后4位为尾数域

  

   1. 浮点数解码

  例如:0  110  1011 对这个8位模式来表示的浮点数进行十进制的解码。第一位是0,说明这个数是个非负数

      先在最后四位的前面加一个小数点为:     .1011

      再将指数域作为一个3位的余码记数法的整数: 110 的余码表示的十进制数为正数2

      根据得到的指数域所代表的十进制数,以及正负符号,将尾数域的小数点移动,正数为右移,负数位左移。即,得到  10.11

      再将小数点移动后得到的尾数,解码为十进制数得到:2又3/4

    0 011 1100 对这个8位模式的浮点数进行解码。

      尾数域前加小数点:  .1100

      用余码记数法解码指数域: -1

      尾数域小数点左移1位: .01100 

       结果为: 2⅜

 2.浮点数编码  

  例如: 1又1/8   编码为二进制记数法的位模式为 1.001

      从最左边的1开始,复制位模式到尾数域为 1001  并假设最左边存在一个小数点为  .1001

      因为.1001 需要右移1位才能得到1.001,余数记数法表示正数1为101,指数域为101

              此例的数值为正数,因此01011001

1.7.2 截断误差

  依然用8位来表示浮点数。1位符号位 3位指数域 4位尾数域

  2又5/8   转换为二进制记数法为 10101,是5位长度的位模式。因此将这个位模式复制到尾数域中时会丢失掉最右边一位,就就是截断误差

  

  多个浮点数相加时,大数字+小数字,小数字可能会被截断。小数字+小数字,得到的值再+稍大的数字则不容易出现截断。因此,浮点数多个数相加时,相加的顺序很重要。

原文地址:https://www.cnblogs.com/mysic/p/9880517.html