浮点数的加减法 浮点数加减法例题
1个回答
展开全部
浮点数加减法的运算步骤
标签: 2010
2012-05-14 17:30 5912人阅读 评论(2) 收藏 举报
1. 浮点加减法的运算步骤
前面已讲到,浮点数经常被写成如下的形式:
X = Mx * 2Ex
其中Mx为该浮点数的尾数,一般为绝对值小于1的规格化的二进制小数,机器中多用原码(或补码)形式表示。Ex为该浮点数的阶码,一般为二进制整数,机器中多用移码(或补码)表示,给出的是一个指数的幂,而该指数的底常用2、8或16,我们这里先以2为底作例子进行讨论。
浮点加减法的运算步骤
假定有两个浮点数
X = Mx * 2Ex , Y = My * 2Ey
1. 实现X±Y运算,要用如下五步完成:
(1) 对阶操作,即比较两个浮点数的阶码值的大小.求△E=Ex-Ey。当其不等于零时,首先应使两个数取相同的阶码值。其实现方法是,将原来阶码小的数的尾数右移|△E|位,其阶码值加上|△E|,即每右移一次尾数要使阶码加1,则该浮点数的值不变(但精度变差了)。尾数右移时,对原码形式的尾数,符号位不参加移位,尾数高位补0;对补码形式的尾数,符号位要参加右移并使自己保持不变。为减少误差,可用
另外的线路,保留右移过程中丢掉的一到几位的高位值,供以后舍入操作使用。
(2) 实现尾数的加(减)运算,对两个完成对阶后的浮点数执行求和(差)操作。
(3) 规格化处理,若得到的结果不满足规格化规则,就必须把它变成规格化的数,对双符号位的补码尾数来说,就必须是001××…×或
110××…×的形式。这里的规格化处理规则是:
.当结果尾数的两个符号位的值不同时,表明尾数运算结果溢出。此时应使结果尾数右移一位,并使阶码的值加1,这被称为向右规格化,简称右规。
.当尾数的运算结果不溢出,但最高数值位与符号位同值,表明不满足规格化规则,此时应重复地使尾数左移、阶减减1,直到出现在最高数值位上的值与符号位的值不同为止,这是向左规格化的操作,简称左规。
(4) 舍入操作。在执行对阶或右规操作时,会使尾数低位上的一位或多位的数值被移掉,使数值的精度受到影响,可以把移掉的几个高位的值保存起来供舍入使用。舍入的总的原则是要有舍有入,而且尽量使舍和入的机会均等,以防止误差积累。常用的办法有"0"舍"1"入法,即移掉的最高位为1时 则在尾数末位加1;为0时则舍去移掉的数值。该方案的最大误差为2-(n+1)。这样做可能又使尾数溢出,此时就要再做一次右规。另一种方法 "置1"法,即右移时,丢掉移出的原低位上的值,并把结果的最低位置成1。该方案同样有使结果尾数变大或变小两种可能。即舍入前尾数最低位已
为0,使其变1,对正数而言,其值变大,等于最低位入了个1。若尾数最低位已为1,则再对其置1无实际效用,等于舍掉了丢失的尾数低位值。
(5) 判结果的正确性,即检查阶码是否溢出。浮点数的溢出是以其阶码溢出表现出来的。在加减运算真正结束前,要检查是否产生了溢出,若阶码正常,加(减)运算正常结束;若阶码下溢,要置运算结果为浮点形式的机器零,若上溢,则置溢出标志。
图2.21 规格化浮点加减运算流程
看一个浮点数加法运算的实例。
假定 X=2010 * 0.11011011, Y=2100 * (-0.10101100)则它们的浮点表示分别为
阶符 阶码 数符 尾数
[X]浮 = 00 010 00 11011011
[Y]浮 = 00 100 11 01010100
补码 补码
执行X+Y的过程如下:
(1)求阶差和对阶
△ E = Ex-Ey = [Ex]浮 +[-Ey]浮 = 00 010 + 11 100 = 11 110即△E 为-2,
X的阶码小,应使Mx右移两位,Ex加2, 得[X]浮 = 00 100 00 00110110 11
(2)尾数求和
00 00110110
+ 11 01010100
11 10001010
(3)规格化处理
结果的符号位与最高数值位同值,应执行左规处理,结果为11 00010101 10, 阶码为00 011。
(4)舍入处理
采用0舍1入法处理,则有
11 00010101
+ 1
11 00010110
(5)判溢出
阶码符号位为00.不溢出,故得最终结果为 X+Y = 2011 *(-0.11101010)
2.7.1 浮点加法和减法 (2013-12-03 13:14:27)转载▼
标签: 教育 分类: 版级系统开发
设有两个浮点数x和y,它们分别为:
x=2Ex·Mx
y=2Ey·My
两浮点数进行加法和减法的运算规则是
x±y=(Mx2Ex-Ey±My)2Ey, Ex
其中,Ex、Ey分别为x、y的阶码,Sx、Sy分别为的尾数。完成浮点加减运算的操作过程大体分为四步:
1. 0 操作数的检查;
2. 比较阶码大小并完成对阶;
3. 尾数进行加或减运算;
4. 结果规格化并进行舍入处理。
1.0操作数检查
浮点加减运算过程比定点运算过程复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作,以节省时间。0操作数检查步骤则用来完成这一功能。
2.对阶
两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐。若两数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,若两数阶码不同,表示小数点位置没有对齐,此时必须使两数的阶码相同,这个过程叫做对
阶。
要对阶,首先应求出两数阶码Ex和Ey之差,即:
△x = Ex - Ey
若Ex = Ey,表示两数阶码相等,不需改变两数的阶码;若Ex ≠ Ey,要通过尾数的移位以改变Ex或Ey,使之相等。由于浮点表示的数多是规格化的,尾数左移会引起最高有产位的丢失,造成很大误差;而尾数右移虽引起最低有效位的丢失,但造成的误差较小,因此,对阶操作规定使尾数右移,尾数右移后使阶码作相应增加,其数值保持不变。很显然,一个增加后的阶码与另一个相等,所增加的阶码一定是小阶。因此在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),每右移一位,其阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E。
3.尾数求和
对阶完毕后就可对尾数求和。不论是加法运算还是减法运算,都按加法进行操作,其方法与定点加减运算完全一样。
4.规格化
当尾数用二进制表示时,浮点规格化的定义是尾数M应满足:
1/2 ≤ |M|
显然对于正数而言,有M = 00.1φφ…φ;对于负数,其补码形式为11.0φφ…φ(即-0.0*******,左归)。这样,当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,即为00.1φφ…φ或11.1φφ…φ,就是规格化的数;如果它们相等,即为00.0φφ…φ或11.0φφ…φ,就不是规格化的数,在这种情况下需要尾数左移以实现规格化的过程,叫做向左规格化。规则是:尾数左移1位,阶码减1。
在浮点加减运算时,尾数求和的结果也可以得到01.φφ…φ或10.φφ…φ,即两符号位不相等,在这定点加减运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将尾数运算结果右移以实现规格化表示,称为向右规格化,即尾数右移1位,阶码加1。
5.舍入
在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。
常用的舍入方法有两种:一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位加“1”,另一种是“恒置1”,即只要数位被移掉,就在尾数的末位恒置“1”。
6.溢出处理
浮点数的溢出是以其阶码溢出表现出来的。在加、减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应的处理:若阶码下溢,要置运算结果为浮点形式的机器0;若阶码上溢,则置溢出标志。
【例 】 设x=2010×0.11011011,y=2100×(-0.10101100),求x+y。
[解:]
为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的
浮点表示分别为
[x]浮=00 010, 0.11011011
[y]浮=00 100, 1.01010100
求阶差并对阶
△E=Ex-Ey=[Ex]补+[-Ey]补=00 010+11 100=11 110
即△E为-2,x的阶码小,应使Mx右移两位,Ex加2,
[x]浮=00 100,0.00110110(11)
其中(11)表示Mx右移2位后移出的最低两位数。
尾数求和
0. 0 0 1 1 0 1 1 0 (11)
+ 1. 0 1 0 1 0 1 0 0
1. 1 0 0 0 1 0 1 0 (11)
规格化处理
尾数运算结果的符号位与最高数值位同值,应执行左规处理,结果为1.00010101(10),阶码为 00 011。
舍入处理
采用0舍1入法处理,则有
1. 0 0 0 1 0 1 0 1
+ 1
────────────────
1. 0 0 0 1 0 1 1 0
判溢出
阶码符号位为00,不溢出,故得最终结果为
x+y=2011×(-0.11101010)
标签: 2010
2012-05-14 17:30 5912人阅读 评论(2) 收藏 举报
1. 浮点加减法的运算步骤
前面已讲到,浮点数经常被写成如下的形式:
X = Mx * 2Ex
其中Mx为该浮点数的尾数,一般为绝对值小于1的规格化的二进制小数,机器中多用原码(或补码)形式表示。Ex为该浮点数的阶码,一般为二进制整数,机器中多用移码(或补码)表示,给出的是一个指数的幂,而该指数的底常用2、8或16,我们这里先以2为底作例子进行讨论。
浮点加减法的运算步骤
假定有两个浮点数
X = Mx * 2Ex , Y = My * 2Ey
1. 实现X±Y运算,要用如下五步完成:
(1) 对阶操作,即比较两个浮点数的阶码值的大小.求△E=Ex-Ey。当其不等于零时,首先应使两个数取相同的阶码值。其实现方法是,将原来阶码小的数的尾数右移|△E|位,其阶码值加上|△E|,即每右移一次尾数要使阶码加1,则该浮点数的值不变(但精度变差了)。尾数右移时,对原码形式的尾数,符号位不参加移位,尾数高位补0;对补码形式的尾数,符号位要参加右移并使自己保持不变。为减少误差,可用
另外的线路,保留右移过程中丢掉的一到几位的高位值,供以后舍入操作使用。
(2) 实现尾数的加(减)运算,对两个完成对阶后的浮点数执行求和(差)操作。
(3) 规格化处理,若得到的结果不满足规格化规则,就必须把它变成规格化的数,对双符号位的补码尾数来说,就必须是001××…×或
110××…×的形式。这里的规格化处理规则是:
.当结果尾数的两个符号位的值不同时,表明尾数运算结果溢出。此时应使结果尾数右移一位,并使阶码的值加1,这被称为向右规格化,简称右规。
.当尾数的运算结果不溢出,但最高数值位与符号位同值,表明不满足规格化规则,此时应重复地使尾数左移、阶减减1,直到出现在最高数值位上的值与符号位的值不同为止,这是向左规格化的操作,简称左规。
(4) 舍入操作。在执行对阶或右规操作时,会使尾数低位上的一位或多位的数值被移掉,使数值的精度受到影响,可以把移掉的几个高位的值保存起来供舍入使用。舍入的总的原则是要有舍有入,而且尽量使舍和入的机会均等,以防止误差积累。常用的办法有"0"舍"1"入法,即移掉的最高位为1时 则在尾数末位加1;为0时则舍去移掉的数值。该方案的最大误差为2-(n+1)。这样做可能又使尾数溢出,此时就要再做一次右规。另一种方法 "置1"法,即右移时,丢掉移出的原低位上的值,并把结果的最低位置成1。该方案同样有使结果尾数变大或变小两种可能。即舍入前尾数最低位已
为0,使其变1,对正数而言,其值变大,等于最低位入了个1。若尾数最低位已为1,则再对其置1无实际效用,等于舍掉了丢失的尾数低位值。
(5) 判结果的正确性,即检查阶码是否溢出。浮点数的溢出是以其阶码溢出表现出来的。在加减运算真正结束前,要检查是否产生了溢出,若阶码正常,加(减)运算正常结束;若阶码下溢,要置运算结果为浮点形式的机器零,若上溢,则置溢出标志。
图2.21 规格化浮点加减运算流程
看一个浮点数加法运算的实例。
假定 X=2010 * 0.11011011, Y=2100 * (-0.10101100)则它们的浮点表示分别为
阶符 阶码 数符 尾数
[X]浮 = 00 010 00 11011011
[Y]浮 = 00 100 11 01010100
补码 补码
执行X+Y的过程如下:
(1)求阶差和对阶
△ E = Ex-Ey = [Ex]浮 +[-Ey]浮 = 00 010 + 11 100 = 11 110即△E 为-2,
X的阶码小,应使Mx右移两位,Ex加2, 得[X]浮 = 00 100 00 00110110 11
(2)尾数求和
00 00110110
+ 11 01010100
11 10001010
(3)规格化处理
结果的符号位与最高数值位同值,应执行左规处理,结果为11 00010101 10, 阶码为00 011。
(4)舍入处理
采用0舍1入法处理,则有
11 00010101
+ 1
11 00010110
(5)判溢出
阶码符号位为00.不溢出,故得最终结果为 X+Y = 2011 *(-0.11101010)
2.7.1 浮点加法和减法 (2013-12-03 13:14:27)转载▼
标签: 教育 分类: 版级系统开发
设有两个浮点数x和y,它们分别为:
x=2Ex·Mx
y=2Ey·My
两浮点数进行加法和减法的运算规则是
x±y=(Mx2Ex-Ey±My)2Ey, Ex
其中,Ex、Ey分别为x、y的阶码,Sx、Sy分别为的尾数。完成浮点加减运算的操作过程大体分为四步:
1. 0 操作数的检查;
2. 比较阶码大小并完成对阶;
3. 尾数进行加或减运算;
4. 结果规格化并进行舍入处理。
1.0操作数检查
浮点加减运算过程比定点运算过程复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作,以节省时间。0操作数检查步骤则用来完成这一功能。
2.对阶
两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐。若两数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,若两数阶码不同,表示小数点位置没有对齐,此时必须使两数的阶码相同,这个过程叫做对
阶。
要对阶,首先应求出两数阶码Ex和Ey之差,即:
△x = Ex - Ey
若Ex = Ey,表示两数阶码相等,不需改变两数的阶码;若Ex ≠ Ey,要通过尾数的移位以改变Ex或Ey,使之相等。由于浮点表示的数多是规格化的,尾数左移会引起最高有产位的丢失,造成很大误差;而尾数右移虽引起最低有效位的丢失,但造成的误差较小,因此,对阶操作规定使尾数右移,尾数右移后使阶码作相应增加,其数值保持不变。很显然,一个增加后的阶码与另一个相等,所增加的阶码一定是小阶。因此在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),每右移一位,其阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E。
3.尾数求和
对阶完毕后就可对尾数求和。不论是加法运算还是减法运算,都按加法进行操作,其方法与定点加减运算完全一样。
4.规格化
当尾数用二进制表示时,浮点规格化的定义是尾数M应满足:
1/2 ≤ |M|
显然对于正数而言,有M = 00.1φφ…φ;对于负数,其补码形式为11.0φφ…φ(即-0.0*******,左归)。这样,当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,即为00.1φφ…φ或11.1φφ…φ,就是规格化的数;如果它们相等,即为00.0φφ…φ或11.0φφ…φ,就不是规格化的数,在这种情况下需要尾数左移以实现规格化的过程,叫做向左规格化。规则是:尾数左移1位,阶码减1。
在浮点加减运算时,尾数求和的结果也可以得到01.φφ…φ或10.φφ…φ,即两符号位不相等,在这定点加减运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将尾数运算结果右移以实现规格化表示,称为向右规格化,即尾数右移1位,阶码加1。
5.舍入
在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。
常用的舍入方法有两种:一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位加“1”,另一种是“恒置1”,即只要数位被移掉,就在尾数的末位恒置“1”。
6.溢出处理
浮点数的溢出是以其阶码溢出表现出来的。在加、减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应的处理:若阶码下溢,要置运算结果为浮点形式的机器0;若阶码上溢,则置溢出标志。
【例 】 设x=2010×0.11011011,y=2100×(-0.10101100),求x+y。
[解:]
为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的
浮点表示分别为
[x]浮=00 010, 0.11011011
[y]浮=00 100, 1.01010100
求阶差并对阶
△E=Ex-Ey=[Ex]补+[-Ey]补=00 010+11 100=11 110
即△E为-2,x的阶码小,应使Mx右移两位,Ex加2,
[x]浮=00 100,0.00110110(11)
其中(11)表示Mx右移2位后移出的最低两位数。
尾数求和
0. 0 0 1 1 0 1 1 0 (11)
+ 1. 0 1 0 1 0 1 0 0
1. 1 0 0 0 1 0 1 0 (11)
规格化处理
尾数运算结果的符号位与最高数值位同值,应执行左规处理,结果为1.00010101(10),阶码为 00 011。
舍入处理
采用0舍1入法处理,则有
1. 0 0 0 1 0 1 0 1
+ 1
────────────────
1. 0 0 0 1 0 1 1 0
判溢出
阶码符号位为00,不溢出,故得最终结果为
x+y=2011×(-0.11101010)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询