N = S * r^j; S为尾数,j为阶码,r为基数 【在计算机中,尾数为小数,可正可负且正负决定了整个数的正负,阶码为整数,也可正可负】
r可以取2、4、8、16等,当r取4的时候,尾数中的两位二进制数表示尾数中的一位四进制数,以此类推。
问题:一个n位长的尾数,和m位长的阶码的浮点表示,能表示的最大的负数,最小的负数,最小的正数和最大的正数。尾数为原码表示
- 最小的负数:尾数为1,1...1,阶码为0,1...1
- 最大的负数:尾数为1,0...1,阶码为0,1...1
- 最小的正数:尾数为0,0...1,阶码为1,0...0
- 最大的正数:尾数为0,1...1,阶码为0,1...1
- 当一个数在0到最小的正数和最大负数之间的时候,称为下溢,当一个数小于最小负数或者大于最大正数的时候,称为上溢
- 当一个数下溢的时候,按照机器0处理,当一个数上溢的时候,会按照计算出错处理。
问题:浮点数的规格化形式
- r = 2,尾数最高位为1
- r = 4,尾数最高两位不全为0
- r = 8,尾数最高三位不全为0
- ...
问题:尾数的规格化
- r = 2
-
- 左规:尾数左移1位,阶码减1
- 右规:尾数右移1位,阶码加1
- r = 4
-
- 左规:尾数左移2位,阶码减1
- 右规:尾数右移2位,阶码加1
- ...
结论:基数r越大,可表示的浮点数的范围就越大,但是表示精度越低。
技巧:当求最大最小正负数的时候,可以先写出真值形式的表达方式,然后再转化成相应的码制。
关于机器零