计算机组成原理1计算机组成原理2020年2月11日浮点数表示及运算计算机组成原理2一、浮点数的表示N=Re×m=2E×M=2±e×(±m)E0E1E2………EmM0M1M2………Mn尾数值阶值阶符尾符9×10-28=0.9×10-272×1033=0.2×1034任意一个十进制数N可以写成N=10E·×M(十进制表示)计算机中一个任意进制数N可以写成m:尾数,是一个纯小数。e:浮点的指数,是一个整数。R:基数,对于二进计数值的机器是一个常数,一般规定R为2,8或16计算机组成原理3浮点数的表示范围负上溢-+负数正数0正上溢负下溢正下溢N=2E×M|N|→∞产生正上溢或者负上溢|N|→0产生正下溢或者负下溢尾数:用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度阶码:用定点整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围。一个机器浮点数由阶码和尾数及其符号位组成:最大正数最小正数最小负数最大负数计算机组成原理48位定点小数可表示的范围0.0000001---0.11111111/128---127/128设阶码2位,尾数4位可表示2-11*0.0001---211*0.11110.0000001---111.1设阶码3位,尾数3位可表示2-111*0.001---2111*0.1110.0000000001---1110000机器字长一定时,阶码越长,表示范围越大,精度越低浮点数表示范围比定点数大,精度高计算机组成原理5一个浮点数有不同的表示:0.5;0.05101;0.005102;5010-2为提高数据的表示精度,需做规格化处理。浮点数是数学中实数的子集合,由一个纯小数乘上一个指数值来组成。二、浮点数规格化把不满足这一表示要求的尾数,变成满足这一要求的尾数的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改阶码实现。在计算机内,其纯小数部分被称为浮点数的尾数,对非0值的浮点数,要求尾数的绝对值必须=1/2,即尾数域的最高有效位应为1,称满足这种表示要求的浮点数为规格化表示:0.1000101010计算机组成原理6规格化目的:为了提高数据的表示精度为了数据表示的唯一性尾数为R进制的规格化:绝对值大于或等于1/R二进制原码的规格化数的表现形式:正数0.1xxxxxx负数1.0xxxxxx正数0.1xxxxxx负数1.1xxxxxx补码尾数的规格化的表现形式:尾数的最高位与符号位相反。计算机组成原理7解:12310=11110112=0.11110110002×27[7]移=10000+00111=10111[0.1111011000]补=0.1111011000[123]浮=1011101111011000=BBD8H例:对数据12310作规格化浮点数的编码,假定1位符号位,基数为2,阶码5位,采用移码,尾数10位,采用补码。计算机组成原理8S——尾数符号,0正1负;M——尾数,纯小数表示,小数点放在尾数域的最前面。采用原码表示。E——阶码,采用“移码”表示(移码可表示阶符);阶符采用隐含方式,即采用移码方法来表示正负指数。SEM31302322032位SEM63625251064位为便于软件移植,使用IEEE(电气和电子工程师协会)标准IEEE754标准:尾数用原码;阶码用“移码”;基为2。三、浮点数的标准格式IEEE754计算机组成原理9规格化浮点数的真值x=(-1)s(1.M)2E-127e=E–127一个规格化的32位浮点数x的真值为:SEM31302322032位浮点数格式:x=(–1)s×(1.M)×2E-1023一个规格化的64位浮点数x的真值为:这里e是真值,E是机器数1.隐藏位技术2.阶码用“移码”偏移值127而不是128Emin=1,Emax=254/2046原码非0值浮点数的尾数数值最高位必定为1,则在保存浮点数到内存前,通过尾数左移,强行把该位去掉,用同样多的位数能多存一位二进制数,有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。计算机组成原理10例:若浮点数x的二进制存储格式为(41360000)16,求其32位浮点数的十进制值。解:0100,0001,0011,0110,0000,0000,0000,0000数符:0阶码:1000,0010尾数:011,0110,0000,0000,0000,0000指数e=阶码-127=10000010-01111111=00000011=(3)10包括隐藏位1的尾数:1.M=1.01101100000000000000000=1.011011于是有x=(-1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10计算机组成原理11例:将十进制数20.59375转换成32位浮点数的二进制格式来存储。解:首先分别将整数和分数部分转换成二进制数:20.59375=10100.10011然后移动小数点,使其在第1,2位之间10100.10011=1.010010011×24e=4于是得到:e=E–127S=0,E=4+127=131=1000,0011,M=010010011最后得到32位浮点数的二进制存储格式为01000001101001001100000000000000=(41A4C000)16计算机组成原理12解:-0.75=-3/4=-0.112=-1.1×2-1=(-1)1×(1+0.10000000000000000000000)×2-1=(-1)1×(1+0.10000000000000000000000)×2126-127s=1,E=12610=011111102,F=1000…000。1011,1111,0100,0000,0000,0000,0000,0000BF400000H例:将十进制数-0.75表示成单精度的IEEE754标准代码。计算机组成原理13单精度浮点数编码格式+0/-0000/1(-1)S×(0.f)×2(-126)f(非零)00/1(-1)S×(1.f)×2(e-127)f1~2540/1-∞02551+∞02550sNaNSignalingNaN非零0xxxx2550/1NaNNotaNumber非零1xxxx2550/1表示尾数阶码符号位计算机组成原理14IEEE754规格化浮点数表示范围Emax=2046,f=1.1111…,1.111…1×22046-1023=21023×(2-2-52)Emin=1,M=0,1.0×21-1023=2-1022双精度Emax=254,f=1.1111…,1.111…1×2254-127=2127×(2-2-23)Emin=1,M=0,1.0×21-127=2-126单精度最大值最小值格式可表示正数范围可表示负数范围负上溢出负下溢出正下溢出正上溢出零00.52-128-0.52-128(1-2-23)2127-(1-2-23)2127数轴计算机组成原理15设有两个浮点数x和y,它们分别为:浮点加减法运算其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。两浮点数进行加法和减法的运算规则是:x±y=(Mx2Ex-Ey±My)2EyEx=Eyx=2Ex·Mxy=2Ey·My计算机组成原理16完成浮点加减运算的操作过程大体分为:(1)0操作数的检查;(2)比较阶码大小并完成对阶;(3)尾数进行加或减运算;(4)结果规格化。(5)舍入处理。(6)溢出处理。计算机组成原理17使二数阶码相同(即小数点位置对齐),这个过程叫作对阶。•先求两数阶码Ex和Ey之差,即△E=Ex-Ey若△E=0,表示Ex=Ey若△E0,ExEy若△E0,ExEy通过尾数的移动来改变Ex或Ey,使其相等。•对阶原则阶码小的数向阶码大的数对齐;对阶过程小阶的尾数右移,每右移一位,其阶码加1(右规)。(2)对阶(1)0操作数检查210*(0.11000)+28*(0.00110)大阶对小阶210*(0.11000)--28*(11.000)11.000+0.00110?????????小阶对大阶28*(0.00110)--210*(0.00001)0.00001+0.11000=0.11001计算机组成原理18例:x=201×0.1101,y=211×(-0.1010),求x+y=?解:为便于直观了解,两数均以补码表示,阶码、尾数均采用双符号位。[x]补=0001,00.1101[y]补=0011,11.0110[△E]补=[Ex]补-[Ey]补=0001+1101=1110△E=-2,表示Ex比Ey小2,因此将x的尾数右移两位.右移一位,得[x]补=0010,00.0110再右移一位,得[x]补=0011,00.0011至此,△E=0,对阶完毕.计算机组成原理19尾数求和方法与定点加减法运算完全一样。对阶完毕可得:[x]补=0011,00.0011[y]补=0011,11.0110对尾数求和:00.0011+11.011011.1001即得:[x+y]补=0011,11.1001(3)尾数求和运算计算机组成原理20(4)结果规格化求和之后得到的数可能不是规格化了的数,为了增加有效数字的位数,提高运算精度,必须将求和的结果规格化。①规格化的定义:(二进制)121S对正数:S=00.1×××…×对负数:S=11.0×××…×采用双符号位的补码:采用原码:正数:S=0.1×××…×负数:S=1.1×××…×计算机组成原理21规格化规则运算结果产生溢出时,必须进行右归如变形补码结果出现10.XX或者01.XXX如运算结果出现0.0XXX或1.1XX必须左归左归时最低数据有效位补0右归时连同符号位进位位一起右移左归时,阶码作减法,右归时,阶码作加法00.0XXXX--00.1XXX0左规11.1XXXX--11.0XXX0左规01.XXXXX--00.1XXXX右规10.XXXXX--11.0XXXX右规规格化方法计算机组成原理22例:两浮点数x=0.1101210,y=(0.1011)201,求x+y。解:[x]补=0010,00.1101[y]补=0001,00.1011对阶:[△E]补=[Ex]补-[Ey]补=0010+1111=0001y向x对齐,将y的尾数右移一位,阶码加1。[y]补=0010,00.0101[x+y]补=0010,01.0010右归:运算结果两符号位不同,其绝对值大于1,右归。[x+y]补=0011,00.1001求和:00.1101+00.010101.0010计算机组成原理23在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。•简单的舍入方法有两种:①“0舍1入”法即如果右移时被丢掉数位的最高位为0则舍去,反之则将尾数的末位加“1”。②“恒置1”法即只要数位被移掉,就在尾数的末位恒置“1”。从概率上来说,丢掉的0和1各为1/2。(5)舍入处理计算机组成原理24在IEEE754标准中,舍入处理提供了四种可选方法:就近舍入其实质就是通常所说的四舍五入。例如,尾数超出规定的23位的多余位数字是10010,多余位的值超过规定的最低有效位值的一半,故最低有效位应增1。若多余的5位是01111,则简单的截尾即可。对多余的5位10000这种特殊情况:若最低有效位现为0,则截尾;若最低有效位现为1,则向上进一位使其变为0。朝0舍入即朝数轴原点方向舍入,就是简单的截尾。无论尾数是正数还是负数,截尾都使取值的绝对值比原值的绝对值小。这种方法容易导致误差积累。朝+∞舍入对正数来说,只要多余位不全为0则向最低有效位进1;对负数来说则是简单的截尾。朝-∞舍入处理方法正好与朝+∞舍入情况相反。对正数来说,只要多余位不全为0则简单截尾;对负数来说,向最低有效位进1。计算机组成原理25(6)溢出处理与定点加减法一样,浮点