408计算机组成原理学习:浮点数
浮点数的表示
类似于科学计数法
阶码:常用补码或移码表示的定点整数
尾数:常用原码或补码表示的定点小数
类比十进制:+302657264526 = +3.026 * 10^+11
可记为:+11 +3.026
阶符表示阶码的正负,即小数点前移还是后移
浮点数的真值:
N = r^E × M
阶码 E 反映浮点数的 表示范围 及小数点的实际位置;
尾数M的数值部分的位数n反映浮点数的精度 。
阶码的长度一般是固定的
Eg:
a = 0,01; 1.1001
b = 0,10; 0.01001
a的真值 = 2^1 ×(−0.0111) = −0.111
b的真值 = 2^2 ×(+0.01001) = +1.001
浮点数尾数的规格化
+11 +3.026
也可记为: +14 +0.003(尾数的最高位是无效值,会丧失精度)
规格化浮点数:规定尾数的最高数值位必须是一个有效值 。
左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。
通过算数左移、阶码减1 来规格化
右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。
通过算数右移、阶码加1 来规格化
规格化浮点数的特点
规格化的原码尾数,最高数值位一定是1
规格化的补码尾数,符号位与最高数值位一定相反
- 用原码表示的尾数进行规格化:
正数为0.1××…×的形式,其最大值表示为0.11…1;最小值表示为0.10…0。
尾数的表示范围为1/2≤M≤(1−2^−n )。
负数为1.1××…×的形式,其最大值表示为1.10…0;最小值表示为1.11…1。
尾数的表示范围为−(1−2^−n )≤M≤−1/2。 - 用补码表示的尾数进行规格化:
正数为0.1××…×的形式,其最大值表示为0.11…1;最小值表示为0.10…0。
尾数的表示范围为1/2≤M≤(1−2^−n )。
负数为1.0××…×的形式,其最大值表示为1.01…1;最小值表示为1.00…0。
尾数的表示范围为−1≤M≤−(1/2+2^−n )。
注:补码算数左移,低位补0;补码算数右移,高位补1。
IEEE 754
移码的定义:移码 = 真值+偏置值
8位移码的偏置值=128D=1000 0000B,即2^(n-1)
偏置值一般取 2^(n-1) ,此时移码 = 补码符号位取反
Eg:
真值 -127 = -1111111B
移码 = -1111111 + 10000000 = 0000 0001
在IEEE 754中 令偏置值=127D=0111 1111B,即2^(n-1) -1
Eg:
真值 -128 = -1000 0000B
移码 = -1000 0000 + 01111111 = 1111 1111
阶码全1、全0用作特殊用途
所以短浮点数的真值正常范围:-126~127
阶码真值=移码-偏移量
规格化的短浮点数的真值为:(−1)^s ×1.M×2^(E−127),E - 127为阶码的真值
规格化长浮点数的真值为:(−1)^s ×1.M×2^(E−1023)
当阶码E全为0,尾数M不全为0时,表示非规格化小数 ±(0.xx…x)₂ ×2^-126
当阶码E全为0,尾数M全为0时,表示真值 ±0
当阶码E全为1,尾数M全为0时,表示无穷大 ±∞
当阶码E全为1,尾数M不全为0时,表示非数值 “NaN
由浮点数确定真值(阶码不是全0、也不是全1):
- 根据“某浮点数”确定数符、阶码、尾数的分布
- 确定尾数 1.M (注意补充最高的隐含位1)
- 确定阶码的真值 = 移码 - 偏置值 (可将移码看作无符号数,用无符号数的值减去偏置值)
- (−1)^s ×1.M×2^(E−偏置值)
浮点数的加减运算
浮点数加减运算步骤:
① 对阶
使两个数的阶码相等,小阶向大阶看齐,尾数每右移一位,阶码加1
② 尾数加减
③ 规格化
④ 舍入
"0"舍"1"入法:
类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。
恒置“1”法:
尾数右移时,不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。
⑤ 判溢出
若规定阶码不能超过两位,则运算后阶码超出范围,则溢出
Eg:
已知十进制数X=−5/256、Y=+59/1024,按机器补码浮点运算规则计算X−Y,结果用二进制表示,浮点数格式如下:阶符取2位,阶码取3位,数符取2位,尾数取9位
用补码表示阶码和尾数
Eg:
强制类型转换
范围、精度从小到大,转换过程没有损失