欢迎来到天天文库
浏览记录
ID:20950297
大小:60.00 KB
页数:11页
时间:2018-10-18
《计算机中浮点数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、浮点数1.什么是浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数(FixedPointNumber)。在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式,比如99.00或者00.99可以用于表达具有四位精度(Precision),小数点后有两位的货币值。由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。SQL中的NUMBER数据类型就是利用定点数来定义的。还有一种提议的表达方式为有理数表达方式,即用两个整数的比值来表达实数。定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分
2、和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa,尾数有时也称为有效数字——Significand;尾数实际上是有效数字的非正式说法),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如123.45用十进制科学计数法可以表达为1.2345×102,其中1.2345为尾数,10为基数,2为指数。浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。2.IEEE浮点数计算机中是用有限的连续字节保存浮点数的。在IE
3、EE标准中,浮点数是将特定长度的连续字节的所有二进制位分割为特定宽度的符号域,指数域和尾数域三个域,其中保存的值分别用于表示给定二进制浮点数中的符号,指数和尾数。这样,通过尾数和可以调节的指数(所以称为"浮点")就可以表达给定的数值了。IEEE754指定:n两种基本的浮点格式:单精度和双精度。ØIEEE单精度格式具有24位有效数字精度,并总共占用32位。ØIEEE双精度格式具有53位有效数字精度,并总共占用64位。n两种扩展浮点格式:单精度扩展和双精度扩展。此标准并未规定这些格式的精确精度和和大小,但它指定了最小精度和大小。例如,IEEE双精度扩展格式必须至少具有64位有效数字精度,并总共占
4、用至少79位。具体的格式参见下面的图例:3.浮点格式浮点格式是一种数据结构,用于指定包含浮点数的字段、这些字段的布局及其算术解释。浮点存储格式指定如何将浮点格式存储在内存中。IEEE标准定义了这些格式,但具体选择哪种存储格式由实现工具决定。汇编语言软件有时取决于所使用的存储格式,但更高级别的语言通常仅处理浮点数据类型的语言概念。这些类型在不同的高级语言中具有不同的名称,并且与表中所示的IEEE格式相对应。IEEE精度C、C++Fortran(仅限SPARC)单精度floatREAL或REAL*4双精度doubleDOUBLEPRECISION或REAL*8双精度扩展longdoubleREA
5、L*16IEEE754明确规定了单精度浮点格式和双精度浮点格式,并为这两种基本格式分别定义了一组扩展格式。表中显示的longdouble和REAL*16类型适用于IEEE标准定义的一种双精度扩展格式。3.1.单精度格式IEEE单精度格式由三个字段组成:23位小数f;8位偏置指数e;以及1位符号s。这些字段连续存储在一个32位字中(如下图所示)。Ø0:22位包含23位小数f,其中第0位是小数的最低有效位,第22位是最高有效位。IEEE标准要求浮点数必须是规范的。这意味着尾数的小数点左侧必须为1,因此我们在保存尾数的时候,可以省略小数点前面这个1,从而腾出一个二进制位来保存更多的尾数。这样我们实
6、际上用23位长的尾数域表达了24位的尾数。Ø23:30位包含8位偏置指数e,第23位是偏置指数的最低有效位,第30位是最高有效位。8位的指数为可以表达0到255之间的256个指数值。但是,指数可以为正数,也可以为负数。为了处理负指数的情况,实际的指数值按要求需要加上一个偏差(Bias)值作为保存在指数域中的值,单精度数的偏差值为127;偏差的引入使得对于单精度数,实际可以表达的指数值的范围就变成-127到128之间(包含两端)。在本文中,最小指数和最大指数分别用emin和emax来表达。稍后将介绍实际的指数值-127(保存为全0)以及+128(保存为全1)保留用作特殊值的处理。Ø最高的第31
7、位包含符号位s。s为0表示数值为正数,而s为1则表示负数。3.2.双精度格式IEEE双精度格式由三个字段组成:52位小数f;11位偏置指数e;以及1位符号s。这些字段连续存储在两个32位字中(如下图所示)。在SPARC体系结构中,较高地址的32位字包含小数的32位最低有效位,而在x86体系结构中,则较低地址的32-位字包含小数的32位最低有效位。如果用f[31:0]表示小数的32位最低有效位,则在这32位最低
此文档下载收益归作者所有