浮点数的加减运算
1.浮点数的表示:
一般我们表示一个很大的数会用科学计数法,如12 0000 0000 0000 = 1.2x1013。而在计算机中,由于机器字长的限制,我们只能用有限位去近似表示各小数。即M x ra,其中M为尾数,如十进制的1.2,而r为基址,表示r进制,在十进制中r = 10,而a相当于十进制中的13。
而在计算机中由于采用二进制,所以r为2。
表示形式:
阶码(包括阶符号) + 尾数(包括数符)
如假设阶码为5位,符号位占2位,尾数占11位,符号位2位。则5/256可以表示为11011, 11.0 1100 0000
2.左规与右规:
由于计算机机器字长有限,为了不浪费空间,当形如0.0000 1100的二进制时,可以把小数点后的四个0全部去掉,即 左移四位,同时阶码要减4,即0100。这种左移来规格化的方法称为左规,同理右移来规格化的方法称为右规。
3.规格化的了的数:
正数:
原码:0.1xxxx 补码:0.1xxxx 反码:0.1xxxx
负数:1.1xxxx 补码:1.0xxxx 反码:1.0xxxx(即负数规格化数符号位与数值最高位相反。)
这些数X 都在范围1/2 <= |X| < 1。
但是有两个数是特例—— -1和-1/2
因为补码可以表示-1,且-1的规格化数为1.0000,符合要求。
而-1/2虽然在指定范围内,但是其规格化数为1.1000,不符合要求。
4.浮点数加减
1)对阶:
当两个浮点数相加减的时候首先要进行对阶。即假如一个数为5x24 另一个为7x23 ,首先要把两个的阶码变为一样的,然后再对尾数进行加减。那是23变为24,还是24变为23。当24变为23时候,因为阶码减1,所以尾数会向左移导致最高位可能丢掉1,会出现错误,所以应该23变为2^4,同时尾数右移。
2)尾数相加减
3)规格化
4)舍入:为提高精度,要考虑尾数右移时丢失的数值位。
常见的有两种办法:
(1)0舍1入法:尾数右移时,如果丢失的最后一位为0,则舍掉;如果为1,则将尾数的末位加1,但是这样可能导致溢出,所以可能需要做一次右移。
(2)恒置1法:无论舍掉的是0还是1,都使右移后的末位恒置为1。
来源:CSDN
作者:malloc_88
链接:https://blog.csdn.net/weixin_45486992/article/details/104757811