分享

IEEE 754

 何勇力 2010-12-09
IEEE二进制浮点数算术标准(IEEE 754)是最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷与非数值(NaN)),以及这些数值的“浮点数运算子”;它也指明了四种数值修约规则和五种例外状况(包括例外发生的时机与处理方式)。   IEEE 754规定了四种表示浮点数值的方式:单精确度(32位元)、双精确度(64位元)、延伸单精确度(43位元以上,很少使用)与延伸双精确度(79位元以上,通常以80位元实做)。只有32位元模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE格式与算术,但有些将其列为非必要的。例如,IEEE 754问世之前就有的C语言,现在有包括IEEE算术,但不算作强制要求(C语言的float通常是指IEEE单精确度,而double是指双精确度)。   该标准的全称为IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),又称IEC 60559:1989,微处理器系统的二进制浮点数算术(本来的编号是IEC 559:1989)[1]。后来还有“与基数无关的浮点数”的“IEEE 854-1987标准”,有规定基数为2跟10的状况。 浮点数剖析   以下是该标准对浮点数格式的描述。   本文表示位元的约定   我们将电脑上一个长度为W的字节(word)其中的位元以0到W−1的整数编码,通常将最右边的位元编成0,以让编号最小的位元与最低效位元(least significant bit或lsb,代表最小位数,改变时对数值影响最小的位元)一致。声明这一点的必要性在于区分大端法和小端法。   整体呈现   二进制浮点数是以符号数值表示法格式储存,将最高效位元指定为符号位元(sign bit);“指数部份”,即次高效的e位元,为浮点数中经指数偏差(exponent bias)处理过后的指数;“小数部份”,即剩下的f位元,为有效位数(significand)减掉有效位数本身的最高效位元。 如下图所示:   +-+--------+-----------------------+   |S| Exp | Fraction |   +-+--------+-----------------------+   指数偏差   指数偏差(表示法中的指数为实际指数减掉某个值)为 2e-1 - 1,参见有符号数处理的Excess-N。减掉一个值是因为指数必须是有号数才能表达很大或很小的数值,但是有号数通常的表示法——二补数表示法(two's complement),将会使比较变得困难。为了解决这个问题,指数在存储之前需要做偏差修正,将它的值调整到一个无符号数的范围内以便进行比较。此外,指数采用这种方法表示的优点还在于使得浮点数的正规形式和非正规形式之间有了一个平滑的转变。   范例   小数部分最高有效位由指数部分决定。如果指数在0 < exponent < 2e − 1之间,那么小数部分最高有效位将是1,而且这个数将被称为正规形式。如果指数是0,有效数最高有效位将会是0,并且这个数将被称为非正规形式。这里有三个特殊值需要指出:   如果 指数 是0 并且 小数部分 是0, 这个数±0 (和符号位相关)   如果 指数 = 2e − 1 并且 小数部分 是0, 这个数是 ±无穷大 (同样和符号位相关)   如果 指数 = 2e − 1 并且 小数部分 非0, 这个数表示为不是一个数(NaN).   以上规则,总结如下:   形势 指数 小数部分   零 0 0   非正规形式 0 非0   正规形式 1 到 2e − 2 任意   无穷 2e − 1 0   NaN 2e − 1 非零   32位单精度   单精度二进制小数,使用32个位元存储。   1 8 23 位长   +-+--------+-----------------------+   |S| Exp | Fraction |   +-+--------+-----------------------+   31 30 23 22 0 位编号 (从右边开始为0)   偏正值 +127   S为符号位,Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是−126~+127加上127 ,指数值的大小从1~254(0和255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多