浮点数的加减法运算
浮点加减运算
在计算机中,加减法运算用补码实现。
算术运算的常识:两个浮点数如果要进行加减法运算,它们的阶或者指数必须相等。

一、对阶
- 求阶差
- 如果把阶码大的向阶码小的看齐,就要把阶码大的数的尾数部分左移,阶码减小。这个操作有可能在移位过程中把尾数的高位部分移掉,这样就引发了数据的错误,所以,尾数左移在计算机运算中不可取。
- 如果把阶码小的向阶码大的看齐,在移位过程中如果发生数据丢失,也是最右边的数据位发生丢失,最右边的数据位丢失,只会影响数据的精度,不会影响数据的大小。
在计算机中,采用小阶向大阶看齐的方法,实现对阶。
二、 尾数求和
补码加法
三、规格化
- 左规
尾数左移一位,阶码减1,直到数符和第一数位不同为止(机器数表示方式是补码)。 - 右规(尾数的绝对值太大时,右规)
尾数右移一位,阶码加1。
当尾数溢出( >1 )时,需要右规。
是否溢出,可以通过两位的符号位得出:
即尾数出现01.xx…xx或10.xx…xx(两位符号位不同)
四、舍入
舍入,是指数据的长度超过了计算机当中存储数据的物理器件所保存的数据长度。低位部分就要进行处理,保证数据能够以比较精确的精度保存在计算机当中。
在对阶和右规过程中,可能出现尾数末位丢失,引起误差。为了尽可能减小误差,就需要考虑舍入。
舍入的方法:
- 截断法
将移出的数据一律舍去。该方法简单,很常用。但是影响精度。 - 0舍1入法
移掉的是1,则尾数末尾加1,移掉的是0,就不加。
- (末位)恒置“1”法
将要保留的末位数据恒置1,无论右移掉的是1还是0,末位是1还是0。
五、溢出判断

例题1:x=0.1101✖201 ; y=(-0.1010)✖211。求x+y
解:先写出x和y的补码表示形式
[x]补码=00,01;00.1101
[y]补码=00,11;11.0110
- 对阶
- 尾数求和
![]()
- 规格化
[x+y]补的尾数是11.1001,符号位是1,尾数的最高位也是1,补码形式表示。
采用左规的方式,使数据规格化:把尾数左移一位,同时阶码减一。
左规之后的数据:00,10;11.0010
得到结果为:x+y=(-0.1110)✖210
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208076.html原文链接:https://javaforall.net
