浮点数结构详解

上传人:ni****g 文档编号:493683021 上传时间:2023-09-23 格式:DOC 页数:71 大小:1.28MB
返回 下载 相关 举报
浮点数结构详解_第1页
第1页 / 共71页
浮点数结构详解_第2页
第2页 / 共71页
浮点数结构详解_第3页
第3页 / 共71页
浮点数结构详解_第4页
第4页 / 共71页
浮点数结构详解_第5页
第5页 / 共71页
点击查看更多>>
资源描述

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

1、附录DWhat Every Computer Scie ntist Should Know About Floati ng-Po int ArithmeticD-#What Every Computer Scie ntist Should Know About Floati ng-Po int ArithmeticD-#What Every Computer Scie ntist Should Know About Floati ng-Poi nt Arithmetic注 -本附录是对论文 What Every Computer Scientist Should Know About Floa

2、tingPoint Arithmetic (作者:David Goldberg ,发表于 1991 年 3 月号的Computing Surveys)进行编辑之后的重印版本。版权所有1991 , Association for ComputingMachinery, Inc.,经许可重印。D.1摘要许多人认为浮点运算是一个深奥的主题。这相当令人吃惊,因为浮点在计算机系统中是普 遍存在的。几乎每种语言都有浮点数据类型;从 PC到超级计算机都有浮点加速器;多 数编译器可随时进行编译浮点算法;而且实际上,每种操作系统都必须对浮点异常(如溢岀)作岀响应。本文将为您提供一个教程, 涉及的方面包含对计算机

3、系统设计人员产生 直接影响的浮点运算信息。它首先介绍有关浮点表示和舍入误差的背景知识,然后讨论IEEE浮点标准,最后列举了许多示例来说明计算机生成器如何更好地支持浮点。类别和主题描述符:(主要)C.0 计算机系统组织:概论一指令集设计;D.3.4 程 序设计语言:处理器 一编译器,优化;G.1.0 数值分析:概论一计算机运算,错 误分析,数值算法(次要)D.2.1 软件工程:要求/规范一语言;D.3.4程序设计语言:正式定义和理论 一 语义;D.4.1操作系统:进程管理 一 同步。一般术语:算法,设计,语言其他关键字/词:非规格化数值,异常,浮点,浮点标准,渐进下溢,保护数位,NaN,溢岀,相

4、对误差、舍入误差,舍入模式,ulp,下溢。D-1D.2 简介计算机系统的生成器经常需要有关浮点运算的信息。但是,有关这方面的详细信息来源非 常少。有关此主题的书目非常少,而且其中的一部Floating-Point Computation(作者:Pat Sterbenz )现已绝版。本文提供的教程包含与系统构建直接相关的浮点运算(以下简 称为浮点)信息。它由三节组成(这三节并不完全相关)。第一节第2页的“舍入误差”讨论对加、减、乘、除基本运算使用不同舍入策略的含义。它还包含有关衡量舍入误差的 两种方法ulp和相对误差的背景信息。第二节讨论IEEE浮点标准,该标准正被商业硬件 制造商迅速接受。IE

5、EE标准中包括基本运算的舍入方法。对标准的讨论借助了第2页的“舍入误差”部分中的内容。第三节讨论浮点与计算机系统各个设计方面之间的关联。主 题包括指令集设计、优化编译器和异常处理。作者已尽力避免在不给岀正当理由的情况下来声明浮点,这主要是因为证明将产生较为 复杂的基本计算。对于那些不属于文章主旨的说明,已将其归纳到名为“详细信息”的章节中,您可以视实际情况选择跳过此节。另外,此节还包含了许多定理的证明。每个证 明的结尾处均标记有符号 ?。如果未提供证明,?将紧跟在定理声明之后。D.3舍入误差将无穷多位的实数缩略表示为有限位数需要使用近似。即使存在无穷多位整数,多数程序也可将整数计算的结果以32

6、位进行存储。相反,如果指定一个任意的固定位数,那么多 数实数计算将无法以此指定位数精准表示实际数量。因此,通常必须对浮点计算的结果进行舍入,以便与其有限表示相符。舍入误差是浮点计算所独有的特性。第4页的“相对误差和Ulp ”章节说明如何衡量舍入误差。既然多数浮点计算都具有舍入误差,那么如果基本算术运算产生的舍入误差比实际需要 大一些,这有没有关系?该问题是贯穿本章节的核心主题。第5页的“保护数位”章节讨论保护数位,它是一种减少两个相近的数相减时所产生的误差的方法。IBM认为保护数位非常重要,因此在1968年它将保护数位添加到 System/360架构的双精度格式(其 时单精度已具有保护数位),

7、并更新了该领域中所有的现有计算机。下面两个示例说明了 保护数位的效用。IEEE标准不仅仅要求使用保护数位。它提供了用于加、减、乘、除和平方根的算法,并 要求实现产生与该算法相同的结果。因此,将程序从一台计算机移至另一台计算机时,如 果这两台计算机均支持IEEE标准,那么基本运算的结果逐位相同。这大大简化了程序的 移植过程。在第10页的“精确舍入的运算”中介绍了此精确规范的其他用途。D.3.1浮点格式已经提议了几种不同的实数表示法,但是到目前为止使用最广的是浮点表示法。其他表示法的示例有浮动斜线和有符号对数Matula和Kornerup 1985 ; Swartzlander 和Alexopou

8、los 1975。浮点表示法有一个基数B (始终假定其为偶数)和一个精度p。如果3= 10、p = 3,则将数0.1表示为1.00 X10-1。如果3= 2、p= 24,则无法准确表示十进制数 0.1,但是它近似为 1.10011001100110011001101 X2-4。通常,将浮点数表示为 士d.ddd X e3其中d.ddd称为有效数字此术语由Forsythe和Moler 1967提出,现已普遍替代了旧术语mantissa。,它具有p个数字。 更精确地说,士d0 . d1 d2dp-1 X 3表示以下数?d+ 叫 3 1 + + dp 1 3-p T)? 3e(0 di 3)。术语浮

9、点数用于表示一个实数,该实数可以未经全面讨论的格式准确表示。与浮点表示法 相关联的其他两个参数是最大允许指数和最小允许指数,即emax和為in。由于存在3个可能的有效数字,以及emax Pnin + 1个可能的指数,因此浮点数可以按log 2(emax -emin + 1) + log 2(岀)+ 1位编码,其中最后的+1用于符号位。此时,精确编码并不重要。有两个原因导致实数不能准确表示为浮点数。最常见的情况可以用十进制数0.1说明。虽然它具有有限的十进制表示,但是在二进制中它具有无限重复的表示。因此,当3=2时,数0.1介于两个浮点数之间,而这两个浮点数都不能准确地表示它。一种较不常见的 情

10、况是实数超岀范围;也就是说, 其绝对值大于3 X3emax或小于1.0 X3emin。本文的大部 分内容讨论第一种原因导致的问题。然而,超岀范围的数将在第20页的“无穷”和第22页的“反向规格化的数”章节中进行讨论。浮点表示不一定是唯一的。例如, 0.01 X101和1.00 X10-1都表示0.1。如果前导数字不 是零(在上面的等式(1)中,d丸),那么该表示称为规格化。浮点数1.00 X10-1是规 格化的,而0.01 X101则不是。当3= 2、p = 3、emin = -1且emax = 2时,有16个规格化 浮点数,如图D-1所示。粗体散列标记对应于其有效数字是1.00的数。要求浮点

11、表示为规格化,则可以使该表示唯一。遗憾的是,此限制将无法表示零!表示0的一种自然方法是使用1.0 x 3emin -1,因为这样做保留了以下事实:非负实数的数值顺序对应于其浮 点表示的词汇顺序。这假定采用通常的排列方式,即指数存储在有效数字的左侧。将指数存储在k位字段中时,意味着只有 2k - 1个值可用作指数, 因为必须保留一个值来表示 0。请注意,浮点数中的 X是表示法的一部分,这与浮点乘法运算不同。X符号的含义通过上下文来看应该是明确的。例如,表达式(2.5 X10-3) x(4.0 X102)仅产生单个浮点乘法。00.512345图D-13= 2、p = 3、emin = -1、ema

12、x = 2时规格化的数D.3.2相对误差和Ulp因为舍入误差是浮点计算的固有特性,所以需要有一种方法来衡量此误差,这一点很重 要。请考虑使用3= 10且p = 3的浮点格式(此格式在本节中广泛使用)。如果浮点计 算的结果是3.12 X10-2,并且以无限精度计算的结果是.0314,那么您可以清楚地看到最后一位存在2单位的误差。同样,如果将实数.0314159表示为3.14 X10-2,那么将在最后一位存在.159单位的误差。通常,如果浮点数d.dd X 3用于表示z,那么将在最后一位存在?d.dd - (z/ 3)? 3p-1单位的误差。除非数Z大于节1 “ax或小于3 min。否则在另行通知

13、之前,将不会考虑以此方式超出范围的数。, 假设z是近似z的浮点数。那么,?d.dd - 旳? 3p-1将等价于?z Z?/ulp(z。衡量误差的更精确公式是 ?z z?/ ulp( z)。-编辑者术语ulp将用作“最后一位上的单位数” 的简写。如果某个计算的结果是最接近于正确结果的浮点数,那么它仍然可能存在.5 ulp的误差。衡量浮点数与它所近似的实数之间差值的另一种方法是相对误差,它只是用两数之差除以实数的商。例如,当3.14159 近似为3.14X10 0时产生的相对误差是.00159/3.14159 0005。要计算对应于.5 ulp的相对误差,请注意当实数用可能最接近的浮点数d.dd.

14、dd xpe近似表示时,误差可达到 0.00.00俨x e,其中3是数字3/2,在浮点数的有效数字中有p单位,在误差的有效数字中有 p单位个0。此误差是(”2) 3p) x 3e。因为形式为d.dddd x ”的数都具有相同的绝对误差,但具有介于3e和3X”之间的值,所以相对误差介于(3/2) 3-p) x e/ 3e 和(3/2) 3-p) x e/ p3+1 之间。即,1 13 -p2 pPulP 2 3特别是,对应于.5 ulp的相对误差可能随因子3的不同而有所变化。此因子称为浮动系数。将尸(32) 0P设置为上面(2)中的上限,表明:将一个实数舍入为最接近的浮点数 时,相对误差总是以e

15、 (称为机器)为界限。在上例中,相对误差是.00159/3.141590005。为了避免此类较小数,通常将相对误差 表示为一个因子乘以的形式,在此例中= ( 32) 3p = 5(10)-3 = .005。因此,相对误差 将表示为(.00159/3.14159)/.005) 住1 以实数x = 12.35为例说明ulp与相对误差之间的差异。将其近似为 X = 1.24 X101。误 差是0.5 ulp,相对误差是0.8 接下来,将考虑有关数字 8的计算X。精确值是8x = 98.8,而计算值是8? = 9.92 X101。误差是4.0 ulp,相对误差仍然是0.8 &尽管相对误 差保持不变,但以ulp衡量的误差却是原来的9倍。通常,当基数为 3时,以ulp表示 的固定相对误差可按最大因子 3进行浮动。反之,如上述公式(2)所示,固定误差.5 ulp 导致相对误差可按 3进行浮动。衡量舍入误差的最常用方法是以ulp表示。例如,舍入为最接近的浮点数相当于一个小于或等于.5 ulp的误差。但是,在分析由各种公式导致的舍入误差时,使用相对误差是 一种较好的方法。在第3

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

当前位置:首页 > 资格认证/考试 > 自考

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