浮点数加减运算课件
- 格式:doc
- 大小:116.00 KB
- 文档页数:9
如果一个二进制浮点数的尾数的绝对值小于1并且大于等于0.5,(1>|尾数|≥0.5),那么这个二进制浮点数就是一个规格化的浮点数。
用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有一个符号位时:规格化的浮点数的尾数是正数时应该是0 . 1 X X X X X X X X X ……的形式(0表示符号位,X表示0或1中的任意一个数值)规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X X X X ……的形式(1表示符号位,X表示0或1中的任意一个数值)用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有两个符号位时:规格化的浮点数的尾数是正数时应该是00 . 1 X X X X X X X X X ……的形式(00表示符号位,X表示0或1中的任意一个数值)规格化的浮点数的尾数是负数时应该是11 . 0 X X X X X X X X X ……的形式(11表示符号位,X表示0或1中的任意一个数值)两个浮点数加减法的计算结果必须规格化,如果不是规格化的数,则要通过修改阶码并同时左移或者右移尾数,使其变为规格化的数。
[例] x=2010×0.11011011,y=2100×-0.10101100,浮点数均以补码表示,阶码采用双符号位,尾数采用单符号位。
求x+y 。
答:(步骤1)转换成题目中要求的浮点数格式:浮点数x=2010×0.11011011的阶码是+010,尾数是+0.11011011浮点数均以补码表示,所以阶码以补码表示,并且阶码采用双符号位,[x]浮的阶码=00010(00是两个符号位)浮点数均以补码表示,所以尾数以补码表示,并且尾数采用单符号位,[x]浮的尾数=0.11011011(0是1个符号位)浮点数y=2100×-0.10101100的阶码是+100,尾数是- 0.10101100浮点数均以补码表示,所以阶码以补码表示,并且阶码采用双符号位,[y]浮的阶码=00100(00是两个符号位)浮点数均以补码表示,所以尾数以补码表示,并且尾数采用单符号位,[y]浮的尾数=1.01010100(1是1个符号位)(y=2100×-0.10101100中10101100先取反变为01010011,再加1后变为01010100)[x]浮=00010, 0.11011011;[y]浮=00100, 1.01010100;(步骤2)阶数对齐:x的阶码是+2(二进制00010),y的阶码是+4(二进制00100),阶码小的向阶码大的数对齐, x的阶码向y的阶码对齐。
x的阶码加2,从00010变成00100 ,此时x的阶码与y的阶码相等。
[x]浮尾数0.11011011右移两位(小数点不动,左边添加两个符号位,因为x的尾数是正数,所以添加的两个符号位是0),[x]浮尾数变为0.00110110(11)0.11011011(右移两位,小数点不动,左边添加两个符号位)0.00110110(11)因为x的阶码与y的阶码相等,都是00010,所以把x的尾数与y的尾数相加。
(步骤3)尾数相加0. 00 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)注意:因为y的尾数没有对应的位数,所以(11)直接落下来进入结果;x尾数的符号位0与y尾数的符号位1同样参与到加法运算。
(步骤4)判断计算结果是否溢出:当计算结果的尾数只有一个符号位时,符号位与小数点后第一位相等,则没有溢出;如果符号位与小数点后第一位不等,则产生溢出。
一旦发生溢出,计算结果的尾数右移一位,同时阶码加一。
本题中计算结果的尾数是1. 1 0 0 0 1 0 1 0 (11),其中符号位是1,小数点后第一位是1 ,二者相等,没有溢出。
(步骤5)判断计算结果是否满足规格化:用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有一个符号位时:规格化的浮点数的尾数是正数时应该是0 . 1 X X X X X X X X X ……的形式(0表示符号位,X表示0或1中的任意一个数值)规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X X X X ……的形式(1表示符号位,X表示0或1中的任意一个数值)本题中计算结果的尾数是1. 1 0 0 0 1 0 1 0 (11),不满足规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X X X X ……的形式,因此不是规格化的浮点数。
为了规格化,本题中计算结果的尾数是1. 1 0 0 0 1 0 1 0 (11),左移1位,同时阶码减一。
(只能左移,而且左移1位就可以了)原来的计算结果[x+y]浮=00100, 1. 1 0 0 0 1 0 1 0 (11);规格化后(尾数左移1位,小数点不动,右边添加一个0;同时阶码减一)[x+y]浮=00011, 1 . 0 0 0 1 0 1 0 1 (10);尾数1 . 0 0 0 1 0 1 0 1,满足规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X X X X ……的形式,因此是规格化的浮点数。
(步骤6)计算结果舍入处理就近舍入(0舍1入) 法:类似”四舍五入”,丢弃的最高位为1,进1;本题丢弃的是(10),最高位为1,所以向上进1位则有1 . 0 0 0 1 0 1 0 1+ 1────────────────1. 0 0 0 1 0 1 1 0结果为[x+y] 浮=00011, 1 . 0 0 0 1 0 1 1 0;直接舍弃法:本题 (10)被直接舍弃。
结果为[x+y] 浮=00011, 1 . 0 0 0 1 0 1 0 1;[例] x =83,y=165,用变形补码计算x+y ,并指出结果是否溢出。
答:(步骤1)转换成题目中要求的浮点数格式:x=83=(3)10×2-3=(11)2×2-3=(0.11)2×2-1 y=165=(5)10×2-4=(101)2×2-4=(0.101)2×2-1 ( )10表示十进制数,( )2表示二进制数。
浮点数x=(0.11)2×2-1的阶码是-1,尾数是+0.11。
变形补码要求本题中阶码采用补码形式并且两个符号位;尾数采用补码形式并且两个符号位。
[x]浮的阶码=11111(11是两个符号位;1对应二进制是001,001取反后是110,110再加1变成111)[x]浮的尾数=00.11000000(00是两个符号位;题目没写尾数几位,自己假定尾数10位)浮点数y=(0.101)2×2-1的阶码是-1,尾数是+0.101。
[y]浮的阶码=11111(11是两个符号位;1对应二进制是001,001取反后是110,110再加1变成111)[y]浮的尾数=00.10100000(00是两个符号位;题目没写尾数几位,自己假定尾数10位)[x]浮=11111, 00.11000000;[y]浮=11111, 00.10100000;(步骤2)阶数对齐:x的阶码是-1(二进制11111),y的阶码是-1(二进制11111)因为x的阶码与y的阶码相等,都是11111,所以不用移位处理,直接把x的尾数与y 的尾数相加。
(步骤3)尾数相加00.11000000+00.10100000————————————————01.01100000注意:x尾数的符号位00与y尾数的符号位00同样参与到加法运算。
(步骤4)判断计算结果是否溢出:当计算结果的尾数有两个符号位时,两个符号位相等,则没有溢出;如果两个符号位不等,则产生溢出。
一旦发生溢出,计算结果的尾数右移一位,同时阶码加一。
本题中计算结果的尾数是01.01100000,其中一个符号位是0,另外一个符号位是1,两个符号位不等,则产生溢出。
计算结果的尾数01.01100000右移一位(小数点不动,左面添加最左边的符号位0),变成00.10110000(0);同时阶码加一,从11111变成00000。
(步骤5)判断计算结果是否满足规格化:用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有两个符号位时:规格化的浮点数的尾数是正数时应该是 00 . 1 X X X X X X X X X ……的形式 (00表示符号位,X 表示0或1中的任意一个数值)规格化的浮点数的尾数是负数时应该是 11 . 0 X X X X X X X X X ……的形式 (11表示符号位,X 表示0或1中的任意一个数值)本题中计算结果的尾数是00.10110000(0),满足规格化的浮点数的尾数是正数时应该是 00 . 1 X X X X X X X X X ……的形式。
(步骤6)计算结果舍入处理因为舍弃的尾数是(0),所以无论哪种舍弃方法都会得到同样的结果。
原因是舍弃0对结果本身无影响。
因此(0)可以直接舍弃。
结果为[x+y] 浮=00000, 00.10110000;(步骤7)验证结果正确性 x+y=161116516616583=+=+= (11)10×2-4=(1011)2×2-4=(0.1011)2×20 浮点数[x+y] =(0.1011)2×20的阶码是0,尾数是+0.1011。
变形补码要求本题中阶码采用补码形式并且两个符号位;尾数采用补码形式并且两个符号位。
[x+y]浮的阶码=00000(00是两个符号位;0对应二进制是000)[x+y]浮的尾数=00.10110000(00是两个符号位;题目没写尾数几位,自己假定尾数10位)步骤7与步骤6结果一致,所以步骤1到步骤6都是正确的。
[例] x =645,y=323,用变形补码计算x+y ,并指出结果是否溢出。
答:(步骤1)转换成题目中要求的浮点数格式:x=641=(1)10×2-6=(1)2×2-6=(0.1)2×2-5 y=327=(7)10×2-5=(111)2×2-5=(0.111)2×2-2 ( )10表示十进制数,( )2表示二进制数。
浮点数x=(0.1)2×2-5的阶码是-5,尾数是+0.1。
变形补码要求本题中阶码采用补码形式并且两个符号位;尾数采用补码形式并且两个符号位。
[x]浮的阶码=11011(11是两个符号位;5对应二进制是101,101取反后是010,010再加1变成011)[x]浮的尾数=00.10000000(00是两个符号位;题目没写尾数几位,自己假定尾数10位)浮点数y=(0.111)2×2-2的阶码是-2,尾数是+0.111。