浮点数结构详解

上传人:ji****72 文档编号:45925679 上传时间:2018-06-20 格式:PDF 页数:65 大小:1.39MB
返回 下载 相关 举报
浮点数结构详解_第1页
第1页 / 共65页
浮点数结构详解_第2页
第2页 / 共65页
浮点数结构详解_第3页
第3页 / 共65页
浮点数结构详解_第4页
第4页 / 共65页
浮点数结构详解_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《浮点数结构详解》由会员分享,可在线阅读,更多相关《浮点数结构详解(65页珍藏版)》请在金锄头文库上搜索。

1、D-1附录附录 DWhat Every Computer Scientist Should Know About Floating-Point Arithmetic注注 本附录是对论文What Every Computer Scientist Should Know About Floating- Point Arithmetic (作者:David Goldberg,发表于 1991 年 3 月号的 Computing Surveys )进行编辑之后的重印版本。版权所有 1991, Association for Computing Machinery, Inc.,经许可重印。 D.1摘要许

2、多人认为浮点运算是一个深奥的主题。 这相当令人吃惊, 因为浮点在计算机系统中是普 遍存在的。几乎每种语言都有浮点数据类型;从 PC 到超级计算机都有浮点加速器;多 数编译器可随时进行编译浮点算法;而且实际上,每种操作系统都必须对浮点异常 (如 溢出)作出响应。本文将为您提供一个教程,涉及的方面包含对计算机系统设计人员产生 直接影响的浮点运算信息。它首先介绍有关浮点表示和舍入误差的背景知识,然后讨论 IEEE 浮点标准,最后列举了许多示例来说明计算机生成器如何更好地支持浮点。类别和主题描述符: (主要) C.0 计算机系统组织 :概论 指令集设计; D.3.4 程 序设计语言 :处理器 编译器,

3、优化; G.1.0 数值分析 :概论 计算机运算,错 误分析,数值算法 (次要)D.2.1 软件工程 :要求 / 规范 语言; D.3.4 程序设计语言 :正式定义和理论 语义; D.4.1 操作系统 :进程管理 同步。一般术语:算法,设计,语言其他关键字 / 词:非规格化数值,异常,浮点,浮点标准,渐进下溢,保护数位,NaN, 溢出,相对误差、舍入误差,舍入模式, ulp,下溢。D-2 数值计算指南 2005 年 1 月D.2简介计算机系统的生成器经常需要有关浮点运算的信息。 但是, 有关这方面的详细信息来源非 常少。有关此主题的书目非常少,而且其中的一部Floating-Point Com

4、putation (作者: Pat Sterbenz)现已绝版。本文提供的教程包含与系统构建直接相关的浮点运算(以下简 称为浮点)信息。它由三节组成(这三节并不完全相关) 。第一节第 2 页的“舍入误差” 讨论对加、减、乘、除基本运算使用不同舍入策略的含义。它还包含有关衡量舍入误差的 两种方法 ulp 和相对误差的背景信息。第二节讨论 IEEE 浮点标准,该标准正被商业硬件 制造商迅速接受。IEEE 标准中包括基本运算的舍入方法。对标准的讨论借助了第 2 页的 “舍入误差”部分中的内容。第三节讨论浮点与计算机系统各个设计方面之间的关联。主 题包括指令集设计、优化编译器和异常处理。 作者已尽力避

5、免在不给出正当理由的情况下来声明浮点,这主要是因为证明将产生较为 复杂的基本计算。对于那些不属于文章主旨的说明,已将其归纳到名为 “详细信息”的 章节中,您可以视实际情况选择跳过此节。另外,此节还包含了许多定理的证明。每个证 明的结尾处均标记有符号 。如果未提供证明, 将紧跟在定理声明之后。 D.3舍入误差 将无穷多位的实数缩略表示为有限位数需要使用近似。 即使存在无穷多位整数, 多数程序 也可将整数计算的结果以 32 位进行存储。相反,如果指定一个任意的固定位数,那么多 数实数计算将无法以此指定位数精准表示实际数量。 因此, 通常必须对浮点计算的结果进 行舍入,以便与其有限表示相符。舍入误差

6、是浮点计算所独有的特性。第 4 页的 “相对 误差和 Ulp”章节说明如何衡量舍入误差。 既然多数浮点计算都具有舍入误差,那么如果基本算术运算产生的舍入误差比实际需要 大一些,这有没有关系?该问题是贯穿本章节的核心主题。第 5 页的 “保护数位”章节 讨论保护数位,它是一种减少两个相近的数相减时所产生的误差的方法。 IBM 认为保护 数位非常重要,因此在 1968 年它将保护数位添加到 System/360 架构的双精度格式(其 时单精度已具有保护数位) ,并更新了该领域中所有的现有计算机。下面两个示例说明了 保护数位的效用。 IEEE 标准不仅仅要求使用保护数位。它提供了用于加、减、乘、除和

7、平方根的算法,并 要求实现产生与该算法相同的结果。因此,将程序从一台计算机移至另一台计算机时,如 果这两台计算机均支持 IEEE 标准,那么基本运算的结果逐位相同。这大大简化了程序的 移植过程。在第 10 页的 “精确舍入的运算”中介绍了此精确规范的其他用途。 What Every Computer Scientist Should Know About Floating-Point ArithmeticD-3D.3.1浮点格式已经提议了几种不同的实数表示法,但是到目前为止使用最广的是浮点表示法。1浮点表 示法有一个基数 (始终假定其为偶数)和一个精度 p。如果 = 10、p = 3,则将数

8、0.1 表示为 1.00 10-1。如果 = 2、 p = 24,则无法准确表示十进制数 0.1,但是它近似为 1.10011001100110011001101 2-4。 通常,将浮点数表示为 d.dd d e,其中 d.dd d 称为有效数字2,它具有 p 个数字。 更精确地说, d0 . d1 d2 dp-1 e 表示以下数。(1)术语浮点数用于表示一个实数, 该实数可以未经全面讨论的格式准确表示。 与浮点表示法 相关联的其他两个参数是最大允许指数和最小允许指数,即 emax 和 emin。由于存在 p 个 可能的有效数字,以及 emax emin + 1 个可能的指数,因此浮点数可以按

9、位编码,其中最后的 +1 用于符号位。此时,精确编码并不重要。有两个原因导致实数不能准确表示为浮点数。最常见的情况可以用十进制数 0.1 说明。虽 然它具有有限的十进制表示,但是在二进制中它具有无限重复的表示。因此,当 = 2 时,数 0.1 介于两个浮点数之间,而这两个浮点数都不能准确地表示它。一种较不常见的 情况是实数超出范围;也就是说, 其绝对值大于 或小于 1.0 。 本文的大部 分内容讨论第一种原因导致的问题。然而,超出范围的数将在第 20 页的“无穷”和第 22 页的 “反向规格化的数”章节中进行讨论。 浮点表示不一定是唯一的。例如, 0.01 101 和 1.00 10-1 都表

10、示 0.1。如果前导数字不 是零 (在上面的等式 (1) 中, d0 0) ,那么该表示称为规格化。浮点数 1.00 10-1 是规 格化的,而 0.01 101 则不是。当 = 2、p = 3、emin= -1 且 emax = 2 时,有 16 个规格化 浮点数,如图 D-1 所示。粗体散列标记对应于其有效数字是 1.00 的数。要求浮点表示为 规格化,则可以使该表示唯一。遗憾的是,此限制将无法表示零!表示 0 的一种自然方 法是使用 1.0 ,因为 这样做保留了以下事实:非负实数的数值顺序对应于其浮 点表示的词汇顺序。3将指数存储在 k 位字段中时,意味着只有 2k - 1 个值可用作指

11、数, 因为必须保留一个值来表示 0。请注意,浮点数中的 是表示法的一部分,这与浮点乘法运算不同。 符号的含义通过 上下文来看应该是明确的。例如,表达式 (2.5 10-3) (4.0 102) 仅产生单个浮点乘法。1. 其他表示法的示例有浮动斜线和有符号对数 Matula 和 Kornerup 1985 ; Swartzlander 和 Alexopoulos 1975。2. 此术语由 Forsythe 和 Moler 1967 提出,现已普遍替代了旧术语 mantissa。3. 这假定采用通常的排列方式,即指数存储在有效数字的左侧。d0d11dp1p1()+e0di 0,则使用公式 (4)

12、计算 r1 将产生抵消。因此,使用公式 (5) 计算 r1, 使用 (4) 计算 r2。另一方面,如果 b 2 时 p 是偶数,并假设浮点运算是精确舍入的。那么,如 果 k = p/2 是精度的一半 (向上舍入)且 m = k + 1,则可以将 x 拆分为 x = xh + xl, 其中 xh = (m x)(m x x), xl = x xh,每个 xi 是可以使用 p/2 位精度表示的。 9. 当 n = 845 时, xn= 9.45, xn + 0.555 = 10.0, 10.0 - 0.555 = 9.45。因此,当 n 845 时, xn = x845。D-12 数值计算指南 2

13、005 年 1 月为了在示例中说明此定理的应用,可令 = 10,p = 4,b = 3.476,a = 3.463,c = 3.479。 那么,b2 ac 在舍入为最接近的浮点数时是 .03480,而 b b = 12.08,a c = 12.05,因 此 b2 ac 的计算值是 .03。这样,误差就是 480 ulp。使用定理 6 编写 b = 3.5 .024,a = 3.5 - .037 和 c = 3.5 - .021, b2 将变成 3.52 2 3.5 .024 + .0242。每个被加数都是精确 的,因此 b2= 12.25 .168 + .000576,此时未计算其中的和。类似

14、地, ac = 3.52 (3.5 .037 + 3.5 .021) + .037 .021 = 12.25 .2030 +.000777。最后,将这两个数列逐项相减 将为 0 .0350.000201 = .03480 的 b2 ac 得出估计值,它与精确舍入的结果完全相 同。为了说明定理 6 确实需要精确舍入,请假设 p = 3, = 2,x = 7。那么,m = 5,mx = 35,m x = 32。如果使用单个保护数位进行减法运算,那么 (m x) x = 28。因此, xh = 4, xl = 3,由此得出 xl 不能用 p/2 = 1 位表示。 作为精确舍入的最后一个示例,假设用

15、10 除 m。结果是一个浮点数,一般情况下将不等 于 m/10。当 = 2 时,用 10 乘 m/10 将复原 m,条件是使用了精确舍入。实际上,一 个更为常规的事实(由 Kahan 提出)是正确的。其证明非常巧妙,但对此细节不感兴趣 的读者可以直接跳至第 14 页的 “IEEE 标准”章节。D.3.5.3定理 7当 = 2 时,如果 m 和 n 是整数,且 |m| 0。如果 = m n,那么要证明此定理需要得到(9)这是因为在二进制点右侧 m 最多具有 1 位,因此 n 将舍入为 m。为了处理 |n - m| = 1/4 时的中间情况,请注意,由于初始的未缩放的 m 具有 |m| 的情况是类似的) 。10 那么, n16383emin -126 -1022-1022 -16382指数宽度 (位)8 1111 15格式宽度 (位)32 4364 7913.Kahan 认为,扩展精度具有 64 位的有效数字,因为这是可以在 Intel 8087 上不增加循环时间的情况下进行进位 传送的最宽精度 Kahan 1988。15 21.02emin1D-16 数值计算指南 2005 年 1 月该标准将扩展精度作为重中之重, 没有做出有关双精度的任何建议, 但是强烈建议实现应 该支持对应于所支持的最宽基本格式的扩展格式, 使用扩展精度的一个动因来自计算器。通常计

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号