1、【精品文档】基于IEEE 754的浮点数存储格式分析研究计算机应用论文工学论文_7214论文范文 题目:基于IEEE 754的浮点数存储格式分析研究计算机应用论文工学论文 编辑:小小 摘 要 浮点数的表示和存储直接影响计算机的结构和性能IEEE 754是浮点运算部件事实上的工业标准是计算机上使用最为广泛的浮点标准。文章在阐述了浮点数的基本概念和IEEE 754浮点数的表示形式及其格式的基础上比较深入的比较、分析和研究了Intel x86和SPARC结构计算机上使用的三种IEEE浮点数的存储格式。 关键词 IEEE 754,浮点数,浮点格式,浮点存储格式,规格化 0引言 IEEE,Institu
2、te of Electrical and Electronics Engineers电子电气工程师协会,在I985年制定的IEEE 754,IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Std 754-1985 ,二进制浮点运算规范是浮点运算部件事实上的工业标准。许多计算机用户有机会在Intel x86和SPARC 或Power PC机之间交换二进制数据所以对照Intel x86和SPARC结构计算机的数据表示及相关程序设计语言讨论IEEE 754浮点数存储格式的细节是有意义的。本文对浮点数、IEEE 754浮点数的
3、表示方法、规格化处理等进行了分析重点分析、比较了Intel x86和SPARC结构计算机IEEE 754浮点数的存储格式。1 浮点数 在计算机系统的发展过程中曾经提出过多种方法表示实数但是到目前为止使用最广泛的是浮点表示法。相对于定点数而言浮点数利用指数使小数点的位置可以根据需要而上下浮动从而可以灵活地表达更大范围的实数。 浮点数表示法利用科学计数法来表达实数。通常将浮点数表示为 ? d.ddd e其中d.dd d 称为有效数字,significand,它具有 p 个数字,称p位有效数字精度,为基数,Base,e为指数,Exponent,?表示实数的正负1,2。更精确地? d0.d,d,dp,
4、1 e 表示以下数?,d0,d1,1, ,dp,1,p,1,e,0?di,。 对实数的浮点表示仅作如上的规定是不够的因为同一实数的浮点表示还不是唯一的。例如1.0102 0.1 103 和0.01 104 都可以表示100.0。为了达到表示单一性的目的有必要对其作进一步的规范。规定有效数字的最高位(即前导有效位)必须非零即0,d0,。符合该标准的数称为规格化数,Normalized Numbers,否则称为非规格化数(Denormalized Numbers)。 2 IEEE 754浮点数与其浮点格式2.1 实数的IEEE 754表示形式 一个实数V在IEEE 754标准中可以用V,(,1)s
5、M2E 的形式表示3,4说明如下: (1)符号s(sign)决定实数是正数(s,0)还是负数(s,1)对数值0的符号位特殊处理。 (2)有效数字M,significand,是二进制小数M的取值范围在1?M,2或0?M,1。 (3)指数E,exponent,是2的幂它的作用是对浮点数加权。2.2 浮点格式 浮点格式是一种数据结构它规定了构成浮点数的各个字段这些字段的布局及其算术解释。IEEE 754浮点数的数据位被划分为3个字段对以上参数值进行编码: (1)一个单独的符号位s直接编码符号s。 (2)k位的偏置指数e,e,ek,1e1e0,编码指数E移码表示。 (3)n位的小数f(fraction
6、),f,fn,1f1f0,编码有效数字M原码表示。2.3 浮点数的分类 根据偏置指数e的值被编码的浮点数可分成三种类型。 (1)规格化数 当有效数字M在范围1?M,2中且指数e的位模式ek,1e1e0既不全是0也不全是1时浮点格式所表示的数都属于规格化数。这种情况中小数f,0?f,1 ) 的二进制表示为0. fn,1f1f0。有效数字M,1,f即M,1. fn,1f1f0 (其中小数点左侧的数值位称为前导有效位) 。我们总是能调整指数E使得有效数字M在范围1?M,2中这样有效数字的前导有效位总是1因此该位不需显示表示出来只需通过指数隐式给出。需要特别指出的是指数E要加上一个偏置值Bias转换成
7、无符号的偏置指数e也就是说指数E要以移码的形式在存放计算机中。且e、E和Bias三者的对应关系为e=E,Bias其中Bias=2k,1,1。 (2)非规格化数 当指数e的位模式ek,1e1e0全为零,即e,0,时浮点格式所表示的数是非规格化数。这种情况下E=1,Bais有效数字M=f=0. fn,1f1f0 有效数字的前导有效位为0。非规格化数的引入有两个目的。其一是它提供了一种表示数值0的方法其二是它可用来表示那些非常接近于0.0的数。 (3)特殊数 当指数e的位模式ek,1e1e0全为1时小数f的位模式fn,1f1f0全为0,即f=0,时该浮点格式所表示的值表示无穷s=0 时是,?s=1时
8、是,?。当指数e的位模式ek,1e1e0全为1时小数f的位模式fn,1f1f0不为0,fn,1、f1、f0、至少有一个非零即f?0,时该浮点格式所表示的值被称为NaN,Not a Number,。比如当计算 或?,?时用作返回值或者用于表示未初始化的数据。3 IEEE 754浮点存储格式 与浮点格式对应浮点存储格式规定了浮点格式在存储器中如何存放。IEEE标准定义了这些浮点存储格式但具体选择哪种存储格式由实现工具,程序设计语言,决定。汇编语言软件有时取决于所使用的存储格式但更高级的语言通常仅处理浮点数据类型的语言概念。这些浮点数据类型在不同高级语言中有不同的名字相应的IEEE格式如表1。表1
9、IEEE 格式和语言类型IEEE精度CC+FORTRAN单精度floatREAL or REAL*4双精度doubleDOUBLE PRECISION or REAL*8扩展双精度long doubleREAL*16 仅适用于SPARC和PowerPC IEEE 754标准准确地定义了单精度和双精度浮点格式并为这两种基本格式的分别定义了扩展格式表1里扩展双精度格式是IEEE标准定义的扩展双精度类中的一种。下面详细讨论在Intel x86和SPARC平台上使用的三种IEEE浮点存储格式。 3.1 单精度格式 IEEE单精度浮点格式共32位包含三个构成字段:23位小数f8位偏置指数e1位符号s。将
10、这些字段连续存放在一个32位字里并对其进行编码。其中0:22位包含23位的小数f, 23:30位包含8位指数e,第31位包含符号s。如图1所示。 图1 单精度存储格式 一般地32位字的第0位存放小数f的最低有效位LSB,the least significant bit,第22位存放小数f的最高有效位MSB,the most significant bit,第23位存放偏置指数的最低有效位LSB第30位存放偏置指数的最高有效位MSB,最高位第31位存放符号s。3.2 双精度格式 IEEE双精度浮点格式共64位占2个连续32位字包含三个构成字段:52位的小数f11位的偏置指数e1位的符号位s。将
11、这2个连续的32位字整体作为一个64位的字进行重新编号。其中0:51位包含52位的小数f,52:62位包含11位的偏置指数e,而最高位第63位包含符号位s。如图2所示。 图2 双精度浮点数的存储格式 f31:0存放小数f的低32位其中第0位存放整个小数f的最低有效位LSB第31位存放小数f的低32位的最高有效位MSB。 在另外的32位的字里第0 到19位即f51:32存放小数f的最高的20位其中第0位存放这20位最高有效数中的最低有效位LSB第19位存放整个小数f的最高有效位MSB。第20到30位即e52:62存放11位的偏置指数e其中第20位存放偏置指数的最低有效位LSB第30位存放最高有效
12、位MSB。最高位第31位存放符号位s。 在Intel x86结构计算机中数据存放采用小端法,little endian,故较低地址的32位的字中存放小数f的f31:0位。而在在SPARC结构计算机中因其数据存放采用大端法,big endian,故较高地址的32位字中存放小数f的f31:0位。3.3 扩展双精度格式 ? 扩展双精度格式,SPARC 结构计算机, 该4倍精度浮点环境符合IEEE关于扩展双精度格式的定义。该浮点环境的4倍精度浮点格式共128位占4个连续32位字包含3个构成字段:112位的小数f15位的偏置指数e和1位的符号s。将这4个连续的32位字整体作为一个128位的字进行重新编号
13、。其中0:110位包含小数f,112:126位包含偏置指数e,第127位包含符号位s。如图3所示。在SPARC结构计算机中地址最高的32位字存放小数的32位最低有效位即f31:0,但是在PowerPC结构计算机中却是地址最低的32位字存放这些位。紧邻的两个32位字,在SPARC机中向下计算在PowerPC机中向上计算,分别存放f63:32和f95:64。 最后一个字的第0到15位存放小数的最高16位,即f111:96。其中第0位存放该16位的最低有效位第15位存放整个小数f的最高有效位。第16到30位存放15位的偏置指数e其中第16位存放偏置指数的最低有效位第30位存放它的最高有效位。最高位第
14、31位存放符号s。 图3 扩展双精度存储格式 (SPARC 结构计算机) ? 扩展双精度格式,Intel x86结构计算机, 该浮点环境双精度扩展格式符合IEEE双精度扩展格式的定义。该浮点环境的扩展双精度格式共80位占3个连续32位字包含四个构成字段:63位的小数f1位显式前导有效位,explicit leading significand bit,j15位偏置指数e和1位符号位s。将这3个连续的32位字整体作为一个96位的字进行重新编号。其中0:63包含63位的小数f第63位包含前导有效位j64:78位包含15位的偏置指数e最高位第79位包含符号位s。 在Intel结构系计算机中这些字段依
15、次存放在十个连续的字节中。但是由于 UNIX System V Application Binary Interface Intel 386 Processor Supplement (Intel ABI) 要求双精度扩展参数从而占用堆栈中3个相连地址的32位字其中最高一个字的高16位未被使用如图4所示。 图4 扩展双精度存储格式(Intel x86结构计算机) 地址最低的32位字存放小数f的低32位即f31:0。其中第0位存放整个小数f的最低有效位LSB 第31位存放小数低32位的最高有效位MSB。 地址居中的32位字第0到30位存放小数f的31位最高位即f62:32。其中第0位存放31位最
16、高小数位的最低有效位LSB第30位存放整个小数的最高有效位地址居中的32位字的最高位第31位存放显式的前导有效位j。 地址最高32位字里第0到14位存放15位的偏置指数e第0位存放偏置指数的最低有效位LSB第14位存放最高有效位MSB第15位存放符号位s。虽然地址最高的32位字的高16位在Intel x86结构系列机种未被使用但他们对符合Intel ABI的规定来说是必需的。4 总结 以上讨论了Intel x86、Power PC和SPARC平台上使用的三种IEEE 754浮点数格式及其存储格式下面对浮点数的相关参数进行总结具体见表2。 表2 IEEE 浮点格式参数总结参数浮点格式单精度双精度
17、扩展双精度,Intel x86,扩展双精度,SPARC,小数f宽度n235263112前导有效位隐含隐含显式隐含有效数字M精度p245364113偏置指数宽度k8111515偏置值Bias,127,1023,16383,16383符号位宽度1111存储格式宽度326480128 参考文献 David Goldberg with Doug Priest. What Every Computer Scientist Should Know about Floating-Point Arithmetic. , pp1-11. Randal E.BryantDavid OHallaron. Computer Systems Aprogrammers Perspective(英文版) M .北京:电子工业出版社20044David A. Patterson, John L. Hennessy.Computer Organization & Design: The Hardware/Software Interface. (英文版 第二版) M . 北京:机械工业出版社1999.275321转贴于