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位长度的位模式。因此将这个位模式复制到尾数域中时会丢失掉最右边一位,就就是截断误差
多个浮点数相加时,大数字+小数字,小数字可能会被截断。小数字+小数字,得到的值再+稍大的数字则不容易出现截断。因此,浮点数多个数相加时,相加的顺序很重要。