浮点数的表示
对于r进制数:
knkn-1…k2k1k0k-1k-2…k-m
=knrn+kn-1rn-1+…+k2r2+k1r1+k0r0+k-1r-1+k-2*r-2+…+k-m*r-m
浮点数通常用如下格式来表示
浮点数的真值:N= 阶码的底(通常为2)的阶码次方乘以尾数
N = r E ∗ M N = r^E * M N=rE∗M
例题
1.阶码、尾数都是用补码表示的,求出a,b的真值
a=0,01;1.1001
b=0,01;0.01001
- 先来看a
- 阶码符号为正,阶码值为1,那么rE=21
- 尾数的尾符为1,则表示为负数,1001的补码为0111,因此真值是-0.0111
- N = rE * M=21 *(-0.0111)
- 乘以(-0111)相当于111香右移动了4位,因此等于 − 7 2 4 {-7\over 2^4} 24−7,就等于 − 7 16 {-7\over 16} 16−7,所以N= − 7 8 {-7\over 8} 8−7
- 此浮点数在8个bit的计算机中表示为001
11001
- 再来看b
- 按照a的思路,我们可以得出N=21(0.01001)=21 9 2 5 {9\over 2^5} 259= 9 16 {9\over 16} 169
在计算机中表示为00100100
,很明显最后一位被舍弃了,很显然精度损失了,那么有没有方法解决呢,其实尾数部分可以按照一定的规格来演算,即第一个数字用有效的数字1来表示,而不是用0,那么针对b的尾数部分就可以用0.1001
来表示,那么阶数就应该为 2 1 2^1 21变为 2 0 2^0 20,即变为000
,所以最终表示为00001001
- 规格化:规定尾数的最高数位的第一个数字为有效值