浮点数的加减运算
首先在对浮点数进行加减运算时,先问一下大家是否对浮点数的表示方法是否已经清楚了呢?
浮点数表示方法:
这里我举个栗子,例13/128;
二进制表示方法:0.0001101000;
那么如果用浮点数规格化怎么表示?且让我慢慢与你细说(●'◡'●)!
浮点数规格化表示包含
1.阶符(就是阶码的正负,例如2^1,则阶码就是1,阶码为正数所以阶符为0);
2.阶码(1*2^2阶码就是2);
3.尾数(0.1011*2^1,其中小数点后面的1011就是尾数);
4.数符(0.1011*2^1,就是这个数是正数还是负数,若是负数则数符就是1,正数就是0);
好了,有了以上的概念,那么一个0.0001101000;
浮点数规格化为:1 11;0.11011000;//阶符阶码;数符尾数;这是表示的顺序,从左到右;
好了,终于可以进入正题了,现在开始进行的浮点数的加减运算;
举个栗子🐖:
已知俩浮点数 x=0.1101*2^10, y=0.1011*2^01,求x+y?
步骤:
先进行对阶,x-y,计算机里面没有减法所以需要进行补码操作,
即x的阶码的补码00 10;-y的阶码为11 11;
规格化 x=00 10;0.1101; y=0010;0.1011;
两者阶码相加观察阶符变化
00 10
+11 11
------------------------------------------------------------------------------------------------
00 01
x-y是一个正数,所以y要向x对阶有0001知,需要尾数向右移动,移动
一位,并且y的阶码需要+1,y=0010;0.01011;
然后尾数求和,0.1101
+ 0.01011
------------------------------------------------------------------------------------------------
1.00101
这里出现了1.0……,需要注重的是,如果出现了01.0.……或者10.0……这种的说明了一个问题,
那就是溢出了,此时需要将尾数右移一位,而此时阶码则要+1;阶码变化为0011;
所以(x+y)补=00 11;0.100101;
(x+y)补=0.100101*2^11;
需要注意:
如果尾数得到的结果出现01.0.……或者10.0……,需要进行右规即向右移动一位;阶码+1;切记!
如果尾数得到的结果出现00.0.……或者11.1……,需要进行左规向左移动一位;阶码-1;切记!