title: 浮点加减运算
date: 2023-10-17
tag: 计算机组成原理
浮点加减运算
浮点加减运算一般采用补码表示的浮点加减运算。
普遍的,运算对于两个浮点数:
X = 2 m ∗ M x , Y = 2 n ∗ M y X = 2^m * M_x ,Y = 2^n*M_y X=2m∗Mx,Y=2n∗My
在运算中如果m和n相同,我们称两数同阶,加法计算时,只需将m和n相加,尾码单独进行加法计算即可,需要注意的是结果必须以规格化形式出现,因此需要规格化处理。
另外,当两数的阶码不同时,我们需要进行对阶操作。
对阶
对阶的选择
显然地,我们对阶有两种情况,然而,当我们用大阶对小阶时,尾数部分左移动,高位部分被舍弃的话会对结果造成巨大影响,所以我们统一选择小阶对大阶的方法。这样我们舍去的就是较小的低位部分,对精度影响较小。
求阶位差
求m-n的值
调整尾数
- 若m-n<0,将Mx→移动m-n位;
- 若m-n>0,将My→移动n-m位。
注意将移动后多出的位数保留,称为保留附加位,保留附加位加入中间运算能够提高精度,在十进制运算中,我们一般也先算再取近似值,这是一样的经验。
特别地,再IEEE754标准中,通常有3个保留位,从左到右依次是保护位,舍入位,粘位;舍入位右侧有非0数,那么粘位就为1,否则为0 。
尾数运算
移位之后的尾数,按照定点数的补码加减运算法则执行加减操作。
结果规格化
上溢(右规格化)
解决:右规格化
当尾数符号位(双符号位)不同时,则表示尾数上溢出(顾名思义就是尾数向符号位进位了)。
如果符号位为10或01,将尾数位依次→移1位,阶码位加1即可;注意10右移在左边添加1。
左规格化
当尾数运算结果为11.1…或者00.0…需要左规,这个很好理解,左移直到出现11.0…或者00.1…,移动多少位,那么阶码就减多少。
舍入
末位恒置1法
如果右规多出的位数中至少存在一个1,那么无论最低位是0还是1,都变成1。
0舍1入法
如果最低位后一位是0,则舍弃,如果为1,则向末位进一。
溢出判断
当阶码为10或者01时表示溢出。
举例
1.设
X = 2 − 101 ∗ ( − 0.101011 ) , Y = 2 − 010 ∗ ( 0.001110 ) X = 2^{-101} *(-0.101011), Y = 2^{-010} *(0.001110) X=