1.浮点数的表示
1.阶符和阶码的值表示浮点数的小数点的实际位置,并且反应浮点数表示范围
阶码的底通常为2,但也可以为2的倍数
2.尾数(小数)的位数反映浮点数的精度,数符表示正负
3.尾数给出小数,然后根据阶码的大小小数点向前或向后移动
2.浮点数的规格化
对于尾数部分,尾数的数符(表示正负)保留,对于尾数的数值部分需要进行规格化提高精度
1.原码表示的尾数规格化:尾数的数值最高位必须是1
2.补码表示的尾数规格化:尾数的数值最高位和尾数的符号位必须相反
2.1.左规格化
浮点数运算的结果是非规格化数(数值位第一位为0):尾数算数左移一位,价码减一,直到尾数最高位(数值位)是有效值(非零)
1.算数左移(小数点右移):每左移1位则表示该数乘以2,则需要阶码减1(即除2),将其值还原
2.相当于3 = 0.003 * 10 ^ 3 的科学计数法算数左移4位(小数点右移4位)
= 3.0 * 10 ^ (3 - 0) = 3 * 10 ^ 0 = 3
2.2.右规格化
1.浮点数运算的结果出现溢出(小数点一定要在第一个非0数值位后面):尾数算术右移一位,阶码加一
2.300 * 10 ^ 3 = 300 000 进行右规 → 3 * 10 ^ 5 = 300 000
3.IEEE754
3.1.IEEE754的基本概念
1.移码:补码的基础上,符号位取反
移码的定义:移码 = 真值 + 偏置值(偏置值取 2 ^ (n - 1),n为真值位数)
例如:8bit真值,偏置值为 2 ^ 7 = 128D = 1000 0000B
①真值 - 127 = -1111 1111B
移码 = -1111 1111 + 1000 0000 = 0000 0001
②真值 -3 = -11B
移码 = -11 + 1000 0000 = 0111 1101
2.IEE754中的移码的偏置值为2 ^ (n -1) -1
例如:8bit真值,偏置值为 2 ^ 7 - 1 = 127D = 0111 1111B
①真值 - 128 = -1000 0000B
移码 = -1000 0000 + 0111 1111 = 1111 1111
②真值 -127 = -0111 1111B
移码 = -111 1111 + 0111 1111 = 0000 0000
3.
①数符:表示正负
②阶码:用移码表示,阶码全0和全1用作特殊用途,因此,真值的正常范围为 -126 ~ +127。阶码真值 = 移码 - 偏置值
可以将移码看作无符号数,用该无符号数减去偏置值,即可确定阶码真值
③尾数:隐含最高位1,即实际总共24位(1.XXXXXXX)
④偏置值为127D
⑤真值范围:(正负) 1.M * 2 ^ (E(阶码真值) - 127(偏置值))
3.2.IEEE754的表示范围
1.最小绝对值:尾数全0,阶码真值最小 -126,真值为(1.0)* 2 ^ (-126)(二进制)
2.最大绝对值:尾数全1,阶码真值最大 127,真值为(1.11111……) * 2 ^ (127)
3.阶码全0,尾数不全0时,表示非规格化小数,(正负)(0.XXX……) * 2 ^(-126)
非规格化小数指的是数值的最高位不为1,此时能表示比最小绝对值更小的数字
阶码真值固定为126 ,而非继续采用阶码真值 = 移码 - 偏置值的方式确定
4.阶码全0,尾数全0时,表示真值(正负)0
5.阶码全1,尾数全0时,表示(正负)无穷大
6.阶码全1,尾数不全0时,表示非数值NaN(NOT A NUMBER)非法运算(0/0)
4.浮点数的运算
1.对阶:阶数更小的向结束更大的对齐。方便对尾数进行处理,算数右移
2.尾数加减:两个尾数进行加减得到结果
3.规格化:
①出现0.XXXXX→左规X.XXXX
②出现XX.XXX→右规→X.XXXX
4.舍入:浮点数位数有限
5.判断溢出:运算后阶码超出范围,则发生溢出
溢出处理:
①零舍一入:尾数右移时,被舍去的是0,则不进行操作;被舍去的是1,则在尾数的末位+1,但是,可能会导致右规
②恒为1:尾数右移时,若产生舍去,不管0还是1,尾数的末位都置为1,可能变大可能变小
阶码溢出一定发生溢出,但是尾数溢出不一定发生溢出(可以通过3、4补救)