您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > IEEE 754标准
IEEE754标准2浮点数的表示方法•把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示•数的小数点位置随比例因子的不同而在一定范围内自由浮动–一个十进制数N可以写成N=10e×M–一个R进制数N可以写成N=Re×MM尾数e指数R基数数的科学表达法3阶码和尾数用定点小数表示,给出有效数字的位数决定了浮点数的表示精度表达指数部分用整数形式表示,指明小数点在数据中的位置决定浮点数的表示范围早期计算机表达法432位单精度浮点数E:含阶符的阶码,8位阶码采用移码方式来表示正负指数S:1位符号位0表示正数1表示负数M:尾数,23位小数表示,小数点放在尾数域最前面IEEE754标准564位双精度浮点数E:含阶符的阶码,11位S:1位符号位M:尾数,52位小数IEEE754标准6浮点数的规格化例:156.78=15.678×101=1.5678×102=0.15678×103=RE×M对于二进制数1011.1101=0.10111101×2+4=10.111101×2+2=1.0111101×2+3(规格化表示法)=1.0111101×2+11(规格化表示法)=RE×M那么,计算机中究竟采用哪种数据形式?多种数据形式二进制数7•尾数最高有效位为1,隐藏,并且隐藏在小数点的左边(即:1≤M<2)•32位单精度浮点数规格化表示x=(-1)s×(1.M)×2E-127e=E-127(E=e+127)•64位双精度浮点数规格化表示x=(-1)s×(1.M)×2E-1023e=E-1023(E=e+1023)指数真值e用偏移码形式表示为阶码E规格化表示原则IEEE754标准8④X=(-1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10②指数e=阶码-127=10000010-01111111=00000011=(3)10③包括隐藏位1的尾数1.M=1.011011例1:浮点机器数(41360000)16,求真值①十六进制数展开成二进制数01000001001101100000000000000000S阶码E(8位)尾数M(23位)9例2:真值20.59375,求32位单精度浮点数①分别将整数和分数部分转换成二进制数20.59375=10100.10011②移动小数点,使其在第1、2位之间10100.10011=1.010010011×24e=4S=0E=4+127=131=10000011M=010010011③得到32位浮点数的二进制存储格式为:01000001101001001100000000000000=(41A4C000)1610E=1(00000001)~254(11111110)e=-126~+127表达的数据范围(绝对值):最小值:e=-126,M=0(1.M=1)十进制表达:2-126≈1.18×10-38最大值:e=127,M=11…1(23个1)1.M=1.11…1(23个1)=2-2-23十进制表达:(2-2-23)×2127≈2×2127≈3.40×103832位单精度规格化浮点数IEEE754标准11E=1~2046e=-1022~+1023表达的数据范围(绝对值):最小值:e=-1022,M=0(1.M=1)十进制表达:2-1022≈2.23×10-308最大值:e=1023,M=11…1(52个1)1.M=1.11…1(52个1)=2-2-52十进制表达:(2-2-52)×21023≈2×21023≈1.79×1030864位双精度规格化浮点数IEEE754标准12真值0的机器数(机器零)阶码E=0,尾数M=0正0:S=0,负0:S=1非规格化浮点数:阶码E=0,尾数M≠0规格化浮点数:阶码E=1~254(11111110)无穷大的机器数阶码E=全1(11111111),尾数M=0+∞:S=0,-∞:S=1NaN(notanumber,不是一个数)阶码E=全1(11111111),尾数M≠0用来通知异常情况IEEE754标准32位单精度浮点数13•浮点数定义其实就是0.XXXXX*2^XXXX•零点多少乘以2的多少次方•其中零点多少就是尾数,2的多少次方就是阶码,不管计算机用几位表示阶码,肯定有个表示的范围,一共有负的最大值,负的最小值,正的最大值,正的最小值4种限制•其中负的最小值(符号负,绝对值最大)就是你所问的问题,当一个表示方式中的阶码是负数,而且这个负数小于计算机所能表示的阶码•如以上2的XXX次方中,XXX是负数(绝对值很大),非常小,在数学上这个值就非常接近于零,在计算机上,因为无法表示比这个值更小了,所以就把这个浮点数作为零处理14•补充:不用管位数,先看阶码•假设一个10进制的数,•0.9999*10^-9999999999999999999999999,•10的-99999999999999999999999次方,那么这个数是不是很接近0,•不管前面的0.9999是正还是负•对于2进制也一样,•0.1111*2^-111111111111111111111111111111•计算机保存数字的位有限,所能表示最小的数也有范围,当一个表示方式比它所能表示的数更小时,计算机无法表示,就作为0处理,实际上,这个数也很接近0了,主要还是从数学上理解15•暂告一段落,前面的东西明白了么?16浮点加法、减法运算•两浮点数进行加法和减法的运算规则x±y=(Mx2Ex-Ey±My)2Ey,Ex=Ey•完成浮点加减运算的操作过程大体分为四步:第一步,0操作数检查;第二步,比较阶码大小并完成对阶;第三步,尾数进行加或减运算;第四步,结果规格化并进行舍入处理17浮点加减运算的操作流程(1)0操作数检查(2)比较阶码大小并完成对阶(3)尾数求和运算(4)结果规格化(5)舍入处理(6)溢出处理18(1)0操作数检查•如果判知两个操作数x或y中有一个数为0,•即可得知运算结果而没有必要再进行后续的一系列操作,•以节省运算时间19(2)比较阶码大小并完成对阶•两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐–若两数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算–反之,若两数阶码不同,表示小数点位置没有对齐,此时必须使两数的阶码相同,这个过程叫作对阶20•对阶–要对阶,首先应求出两数阶码Ex和Ey之差,即△E=Ex-Ey•若△E=0,表示两数阶码相等,即Ex=Ey;•若△E0,表示ExEy;•若△E0,表示ExEy–当Ex≠Ey时,要通过尾数的移动以改变Ex或Ey,使之相等•对阶操作规定使尾数右移,阶码作相应增加,其数值保持不变–在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),–每右移一位,其阶码加1,直到两数的阶码相等为止,–右移的位数等于阶差△E21(3)尾数求和运算•对阶结束后,即可进行尾数的求和运算•不论加法运算还是减法运算,都按加法进行操作22(4)结果规格化•在浮点加减运算时,尾数求和的结果也可以得到01.ф…ф或10.ф…ф,即两符号位不相等,•在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化•此时将尾数运算结果右移以实现规格化表示,称为向右规格化,即尾数右移1位,阶码加1•当尾数不是1.M时须向左规格化23规格化另一种理解(1)规格化数的定义(2)规格化数的判断r=2≤|S|<112S>0真值原码补码反码规格化形式S<0规格化形式真值原码补码反码0.1×××…0.1×××…0.1×××…0.1×××…原码不论正数、负数,第一数位为1补码符号位和第1数位不同–0.1×××…1.1×××…1.0×××…1.0×××…24特例S=–=–0.100012…12∴[–]补不是规格化的数S=–1∴[–1]补是规格化的数[S]原=1.1000…[S]补=1.1000…[S]补=1.0000…25(3)左规(4)右规尾数1,阶码减1,直到数符和第一数位不同为止上例[x+y]补=00,11;11.1001左规后[x+y]补=00,10;11.0010∴x+y=(–0.1110)×210当尾数溢出(1)时,需右规即尾数出现01.×××或10.×××时……尾数1,阶码加126(5)舍入处理•在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理•简单的舍入方法–0舍1入法–恒置1法•在IEEE754标准中,舍入处理提供了四种可选方法–就近舍入(四舍五入)–朝0舍入(截尾)–朝+∞舍入–朝-∞舍入27(6)溢出处理•浮点数的溢出是以其阶码溢出表现出来的•在加、减运算过程中要检查是否产生了溢出–若阶码正常,加(减)运算正常结束–若阶码溢出,则要进行相应的处理•另外对尾数的溢出也需要处理28举例说明溢出判断设机器数为补码,尾数为规格化形式,并假设阶符取2位,阶码取7位,数符取2位,尾数取n位,则该补码在数轴上的表示为上溢下溢上溢对应负浮点数对应正浮点数00,1111111;11.000…00,1111111;00.111…11,0000000;11.0111…11,0000000;00.1000…2127×(–1)–2-128×(2-1+2-n)2-128×2-12127×(1–2-n)最小负数最大负数最小正数最大正数0阶码01,××···×阶码01,××···×阶码10,××···×按机器零处理29例设x=2010×0.11011011,y=2100×(-0.10101100),求x+y。[解:]为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为[x]浮=00010,0.11011011[y]浮=00100,1.0101010030(1)求阶差并对阶△E=Ex-Ey=[Ex]补+[-Ey]补=00010+11100=(11110)补=(11010)原=(-2)10x的阶码小,应使Mx右移2位,Ex加2,∴[x]浮=00100,0.00110110(11)其中(11)表示Mx右移2位后移出的最低两位数。31(2)尾数求和0.00110110(11)+1.01010100————————————————1.10001010(11)∴x+y=00100,1.10001010(11)32(3)规格化处理•尾数运算结果的符号位与最高数值位为同值,应执行左规处理,•结果为1.00010101(10),•阶码为00011。∴x+y=00011,1.00010101(10)33(4)舍入处理•采用0舍1入法处理,则有1.00010101+1————————————1.00010110∴x+y=00011,1.0001011034(5)判溢出•阶码符号位为00,不溢出,•故得最终结果为x+y=(00011,1.00010110)补=(00011,1.11101010)原=2011×(-0.11101010)35举例:12位浮点数,阶码4位,包含1位阶符,尾数8位,包含1位数符,用补码表示,阶码在前,尾数(包括数符)在后,已知:X=(-0.1001011)×2001Y=0.1100101×2-010求Z=X+Y。•解:[X]浮=00,00111.0110101[Y]浮=11,11000.1100101(1)对阶ΔE=EX-EY=[EX]补+[-EY]补=00,001+00,010=00,011ΔE=30,将MY右移3位,EY加3:[Y]浮=00,00100.0001100(101)(2)尾数相加:[MZ]补=11.1000001(101)(3)结果规格化:左规一位,无溢出:[MZ]补=11.0000011(01)[EZ]补=00,001+11,111=00,000(4)舍入:按照0舍1入法,尾数多余位舍去结果为:[Z]浮=0,0001.000001136例x=(–—)×2-5y=(—)×2-45878求x–y(除阶符、数符外,阶码取3位,尾数取6位)解
本文标题:IEEE 754标准
链接地址:https://www.777doc.com/doc-4920012 .html