对于在指定范围内的操作数,这些转换必须生成精确的结果(如果可能的话),或者 按照规定舍入模式的规则,对此类精确结果进行最低限度的修改。对于不在指定范围 内的操作数,这些转换生成的结果与精确结果之间的差值不得超过取决于舍入模式的 指定误差。 ■五种类型的EEE浮点异常,以及用于向用户指示发生这些类型异常的条件。 五种类型的浮点异常是:无效运算、被零除、上溢、下溢和不精确 ·舍入精度:例如,如果系统提供双精度扩展格式的结果,则用户可以指定将此类结果 舍入到单精度格式或双精度格式的精度。 正E王标准还建议为用户进行异常处理提供支持。 EEE标准所需的特性可以支持区间算法、异常的回顾诊断、有效地实现标准基本函数 (如©X如和c0s)、多精度算法以及用于数值计算的很多其他工具。 与任何其他种类的浮点算法相比,EEE754浮点算法为用户提供了更好的计算控制。EE E标准不仅严格要求遵循实现标准,而且还使得此类实现改进和完善了标准本身,从而简 化了编写复杂的可移植数值程序的任务。 2.2 IEEE格式 本节介绍如何将浮点数据存储在内存中。它汇总了各种正EE存储格式的精度和范围。 2.2.1 存储格式 浮占格式是一一种数根结物,用干指定句令受占数的字码,文些字段的布局及盐首术醒强 存储格式指 如何将浮点格式存储在内存中。EEE标准定义了这些格式,但具体选 择哪种存储格式由实现工具决定。 2-2《数值计算指南》·2005年1月
2-2 《数值计算指南》 • 2005 年 1 月 对于在指定范围内的操作数,这些转换必须生成精确的结果 (如果可能的话),或者 按照规定舍入模式的规则,对此类精确结果进行最低限度的修改。对于不在指定范围 内的操作数,这些转换生成的结果与精确结果之间的差值不得超过取决于舍入模式的 指定误差。 ■ 五种类型的 IEEE 浮点异常,以及用于向用户指示发生这些类型异常的条件。 五种类型的浮点异常是:无效运算、被零除、上溢、下溢和不精确。 ■ 四种舍入方向:向最接近的可表示的值;当有两个最接近的可表示的值时首选“偶数” 值;向负无穷大 (向下);向正无穷大 (向上)以及向 0 (截断)。 ■ 舍入精度;例如,如果系统提供双精度扩展格式的结果,则用户可以指定将此类结果 舍入到单精度格式或双精度格式的精度。 IEEE 标准还建议为用户进行异常处理提供支持。 IEEE 标准所需的特性可以支持区间算法、异常的回顾诊断、有效地实现标准基本函数 (如 exp 和 cos)、多精度算法以及用于数值计算的很多其他工具。 与任何其他种类的浮点算法相比,IEEE 754 浮点算法为用户提供了更好的计算控制。IEE E 标准不仅严格要求遵循实现标准,而且还使得此类实现改进和完善了标准本身,从而简 化了编写复杂的可移植数值程序的任务。 2.2 IEEE 格式 本节介绍如何将浮点数据存储在内存中。它汇总了各种 IEEE 存储格式的精度和范围。 2.2.1 存储格式 浮点格式是一种数据结构,用于指定包含浮点数的字段、这些字段的布局及其算术解释。 浮点存储格式指定如何将浮点格式存储在内存中。IEEE 标准定义了这些格式,但具体选 择哪种存储格式由实现工具决定
汇编语言软件有时取决于所使用的存储格式,但更高级别的语言通常仅处理浮点数据类 这些类型在不同的高级语言中具有不同的名称,并且与表21中所示的 EEE格式相对 表21 正EE格式和语言类型 IEEE精度 C、C4+ Fortran(仅限SPARC) 单精度 float REAL或REAL*4 双精度 double DOUBLE PRECISION REAL*8 双精度扩展 long double REAL*16 EEE754明确规定了单精度浮点格式和双精度浮点格式,并为这两种基本格式分别定义 一组扩展格式。表2-1中显示的1 ong doub1e和REAL*16类型适用于EEE标准定 义的一种双精度扩展格式。 以下几节详细介绍了SPARC和x86平台上用于EEE浮点格式的每种存储格式。 2.2.2 单精度格式 EEE单精度格式由三个字段组成23位小数f:8位偏置指数e:以及1位符号8。这 些字段连续存储在一个32位字中(如图2-1所示)。022位包含23位小数E,其中第0 第30位是高省位的第位裤位第2位 位是小数的最低有效位,第22位是最高有效位 23:30位包含8位信置指数 是偏置指数的最低有效位, se[30:23】 f[22:0】 3130 2322 0 图21 单精度存储格式 表2-2显示 一侧的三个组成字段s、和f的值与另一侧的单精度格式位模式表示的值之 间的对应关系:“意味着无关,即指示字段的值与确定特定单精度格式位模式的值无关。 表2-2 EEE单精度格式位模式表示的值 单辅度格式位模式 值 0<e<255 (-1×2-12”×1.f(正规数) e=0:f≠0 (-1少×2-126×0.f(次正规数) (E中至少有一位不为零) e=0:f=0 (-1少×0.0(有符号的零) (E中的所有位均为零) IEEE算法2-3
IEEE 算法 2-3 汇编语言软件有时取决于所使用的存储格式,但更高级别的语言通常仅处理浮点数据类 型的语言概念。这些类型在不同的高级语言中具有不同的名称,并且与表 2-1 中所示的 IEEE 格式相对应。 IEEE 754 明确规定了单精度浮点格式和双精度浮点格式,并为这两种基本格式分别定义 了一组扩展格式。表 2-1 中显示的 long double 和 REAL*16 类型适用于 IEEE 标准定 义的一种双精度扩展格式。 以下几节详细介绍了 SPARC 和 x86 平台上用于 IEEE 浮点格式的每种存储格式。 2.2.2 单精度格式 IEEE 单精度格式由三个字段组成:23 位小数 f ; 8 位偏置指数 e ;以及 1 位符号 s。这 些字段连续存储在一个 32 位字中(如图 2-1 所示)。0:22 位包含 23 位小数 f,其中第 0 位是小数的最低有效位,第 22 位是最高有效位; 23:30 位包含 8 位偏置指数 e,第 23 位 是偏置指数的最低有效位,第 30 位是最高有效位;最高的第 31 位包含符号位 s。 图 2-1 单精度存储格式 表 2-2 显示一侧的三个组成字段 s、e 和 f 的值与另一侧的单精度格式位模式表示的值之 间的对应关系;u 意味着无关,即指示字段的值与确定特定单精度格式位模式的值无关。 表 2-1 IEEE 格式和语言类型 IEEE 精度 C、 C++ Fortran (仅限 SPARC) 单精度 float REAL 或 REAL*4 双精度 double DOUBLE PRECISION 或 REAL*8 双精度扩展 long double REAL*16 表 2-2 IEEE 单精度格式位模式表示的值 单精度格式位模式 值 0 < e < 255 (–1)s × 2e–127 × 1.f (正规数) e = 0; f ≠ 0 (f 中至少有一位不为零) (–1)s × 2–126 × 0.f (次正规数) e = 0; f = 0 (f 中的所有位均为零) (–1)s × 0.0 (有符号的零) 31 30 23 22 0 s e[30:23] f[22:0]
囊22EEE单精度格式位模式表示的值(续) 单精度格式位横式 中所 +NF(正无穷大) -NP(负无大) s=出e=255,f≠0 NaN(非数 (E中至少有一位不为零) 注意,当e<255时,为单精度格式位模式分配的值是使用以下方法构成的:将二进制基 数点插入到紧邻小数最高有效位的左侧,将一个隐含位插入到紧邻二进制点的左侧,因而 以二进制位置表示法来表示一个带分数(整数加小数,其中0≤ò3小数<1)。 如此构成的带分数称为单精度格式有效数字 之所以称为隐含位的原因是,在单精度格式 位模式中没有显式地指定其值,但偏置指数字段的值隐式指定了该值。 对于单精度格式,正规数和次正规数的差别在于正规数有效数字的前导位(二进制点左 侧的位)为 而次正规数有效数字的前导位为0。在EEE754标准中,单精度格式次 正规数称为单精度格式非规格化数 在单精度格式正规数中23位小数加上隐含前导有效数位提供了24位精度。 表23中给出了重要的单精度存储格式位模式的示例。最大正正规数是以EEE单精度格 大有限数 是以EE 为下 最小正现数和次正规数的十进制值是近似的: 值。 的数字来说,它们是正确的。) 表23 单精度存储格式位模式及其EE值 通用名称 位横式(十大进制) 十进制值 40 00000000 0.0 0 80000000 0.0 3f800000 1.0 2 40000000 2.0 最大正规数 3.40282347e+38 最小正正规数 00800000 1.17549435e38 最大次正规数 1.17549421e38 最小正次正规数 00000001 1.40129846e45 +∞ 7f800000 无穷 -0∞ ff800000 负无穷 非数 7fc00000 NaN 2-4《数值计算指南》·2005年1月
2-4 《数值计算指南》 • 2005 年 1 月 注意,当 e < 255 时,为单精度格式位模式分配的值是使用以下方法构成的:将二进制基 数点插入到紧邻小数最高有效位的左侧,将一个隐含位插入到紧邻二进制点的左侧,因而 以二进制位置表示法来表示一个带分数 (整数加小数,其中 0 ≤ Ò3 小数 < 1)。 如此构成的带分数称为单精度格式有效数字。之所以称为隐含位的原因是,在单精度格式 位模式中没有显式地指定其值,但偏置指数字段的值隐式指定了该值。 对于单精度格式,正规数和次正规数的差别在于正规数有效数字的前导位 (二进制点左 侧的位)为 1,而次正规数有效数字的前导位为 0。在 IEEE 754 标准中,单精度格式次 正规数称为单精度格式非规格化数。 在单精度格式正规数中 23 位小数加上隐含前导有效数位提供了 24 位精度。 表 2-3 中给出了重要的单精度存储格式位模式的示例。最大正正规数是以 IEEE 单精度格 式表示的最大有限数。最小正次正规数是以 IEEE 单精度格式表示的最小正数。最小正正 规数通常称为下溢阈值。(最大和最小正规数和次正规数的十进制值是近似的;对于所示 的数字来说,它们是正确的。) s = 0; e = 255; f = 0 (f 中的所有位均为零) +INF (正无穷大) s = 1; e = 255; f = 0 (f 中的所有位均为零) –INF (负无穷大) s = u; e = 255; f ≠ 0 (f 中至少有一位不为零) NaN (非数) 表 2-3 单精度存储格式位模式及其 IEEE 值 通用名称 位模式 (十六进制) 十进制值 +0 00000000 0.0 -0 80000000 -0.0 1 3f800000 1.0 2 40000000 2.0 最大正规数 7f7fffff 3.40282347e+38 最小正正规数 00800000 1.17549435e-38 最大次正规数 007fffff 1.17549421e-38 最小正次正规数 00000001 1.40129846e-45 + 7f800000 无穷 – ff800000 负无穷 非数 7fc00000 NaN 表 2-2 IEEE 单精度格式位模式表示的值 ( 续 ) 单精度格式位模式 值 ∞ ∞
NaN(非数)可以用任何满足NaN定义的位模式表示。在表2-3中显示的NaN十六进 制值只是可用于表示NaN的众多位模式之一。 2.2.3 双精度格式 EEE双精度格式由三个字段组成:52位小数:1位偏置指数e:以及1位符号 这些字段连续存储在两个32位子中(如图2-2所示)。 在SPARC体系结构中,较高地址的32位字包含小数的32位最低有效位,而在x86体 系结构中,则较低地址的32-位字包含小数的32位最低有效位 如果用310表示小数的32位最低有效位,则在这32位最低有效位中,第0位是整个 小数的最低有效位,而第31位则是最高有效位。 在另一个32位字中,0:19位包含20位小数的最高有效位51:32,其中第0位是这20 位最高有效位中的最低有效位,而第19位 数的最高有效有 200 包含11位 偏置指数©,其中第20位是偏置指数的最低有效位,而第30位是最高有效位:最高的 第31位包含符号位s。 图2-2将这两个连续的32位字按一个64位字那样进行了编号,其中051位存储52位 的小数 52:62位存储11位偏置指数 而第63位存储符号位。 et52:621 f[51:321 6362 5251 32 f[31:0] 31 2-2 双精度存储格式 这三个字段中的位模式值将决定整个位模式所表示的值。 表24显示一侧的三个组成字段中位的值与另一侧双精度格式位模式表示值的对应关系: “意味着无关,即指示字段的值与确定特定双精度格式位模式的值无关。 表2-4 EEE双精度格式位模式表示的值 双精度格式位镇式 0<e<2047 ←-1×210x1.f(正规数) e=0:f≠0 -1少×210应×0.(次正规数) (E中至少有一位不为零) e=0f=0 (-1×0.0(有符号的零) (£中的所有位均为零) IEEE算法2-5
IEEE 算法 2-5 NaN(非数)可以用任何满足 NaN 定义的位模式表示。在表 2-3 中显示的 NaN 十六进 制值只是可用于表示 NaN 的众多位模式之一。 2.2.3 双精度格式 IEEE 双精度格式由三个字段组成:52 位小数 f ; 11 位偏置指数 e ;以及 1 位符号 s。 这些字段连续存储在两个 32 位字中 (如图 2-2 所示)。 在 SPARC 体系结构中,较高地址的 32 位字包含小数的 32 位最低有效位,而在 x86 体 系结构中,则较低地址的 32-位字包含小数的 32 位最低有效位。 如果用 f[31:0] 表示小数的 32 位最低有效位,则在这 32 位最低有效位中,第 0 位是整个 小数的最低有效位,而第 31 位则是最高有效位。 在另一个 32 位字中,0:19 位包含 20 位小数的最高有效位 f[51:32],其中第 0 位是这 20 位最高有效位中的最低有效位,而第 19 位是整个小数的最高有效位; 20:30 位包含 11 位 偏置指数 e,其中第 20 位是偏置指数的最低有效位,而第 30 位是最高有效位;最高的 第 31 位包含符号位 s。 图 2-2 将这两个连续的 32 位字按一个 64 位字那样进行了编号,其中 0:51 位存储 52 位 的小数 f ; 52:62 位存储 11 位偏置指数 e ;而第 63 位存储符号位 s。 图 2-2 双精度存储格式 这三个字段中的位模式值将决定整个位模式所表示的值。 表 2-4 显示一侧的三个组成字段中位的值与另一侧双精度格式位模式表示值的对应关系; u 意味着无关,即指示字段的值与确定特定双精度格式位模式的值无关。 表 2-4 IEEE 双精度格式位模式表示的值 双精度格式位模式 值 0 < e < 2047 (–1)s × 2e–1023 x 1.f (正规数) e = 0; f ≠ 0 (f 中至少有一位不为零) (–1)s × 2–1022 x 0.f (次正规数) e = 0; f = 0 (f 中的所有位均为零) (–1)s × 0.0 (有符号的零) 31 0 63 62 52 51 32 f[31:0] s e[52:62] f[51:32]
囊24EEE双精度格式位模式表示的值(续) 双精度格式位横式 值 +NF(正无穷大) -INF(负无穷大) s=出e=2047f≠0 NaN(非数) (任中至少有一位不为零) 请注意,当e<2047时,赋予双精度格式位模式的值是使用以下方法构成:将二进制基 数点插入到紧邻小数最高有效位的左侧,将一个隐含位插入到紧邻二进制点的左侧。如此 构成的数字称作有效数字。之所以称为隐含位的原因是,在双精度格式位模式中没有显式 地指定其值,但偏置指数字段的值隐式指定了该值。 对于双精度格式,正规数和次正规数的差别在于正规数有效数字的前导位(二进制点方 侧的位)为1,而次正规数有效数字的前导位为0。在EEE标准754中,双精度格式次 正规数称为双精度格式非规格化数。 在双精度格式正规数中52位小数加上隐含前导有效数位提供了53位精度, 表25中给出了重要的双精度存储格式位模式的示例。第二列中的位模式显示为两个8 位十六进制数。对于SPARC体系结构,左侧是较低地址的32位字的值,右侧是较高地 址的32位字的值,而对于x86体系结构,左侧是较高地址的字,右侧是较低地址的字 最大正正规数是以EEE双精度格式表示的最大有限数。最小正次正规数是以EEE双精 度格式表示的最小正数。最小正正规数通常称为下溢阈值。(最大和最小正规数和次正规 数的十进制值是近似的:对于所示的数字来说,它们是正确的。) 表2-5 双精度存储格式位模式及其EEE值的位模式 通用名 位式(十大进制) 十进制值 +0 0000000000000000 0.0 -0 8000000000000000 0.0 3ff0000000000000 1 3 4000000000000000 2.0 最大正规数 7fefffff 1.7976931348623157e+308 最小正正规数 0010000000000000 2.2250738585072014e-308 最大次正规数 OOOEEEEE EEEEEEEE 2.2250738585072009e-308 最小正次正规数 0000000000000001 4.9406564584124654e-324 +0∞ 7ff0000000000000 无穷 -00 fff0000000000000 负无穷 非数 7ff8000000000000 NaN 2-6《数值计算指南》·2005年1月
2-6 《数值计算指南》 • 2005 年 1 月 请注意,当 e < 2047 时,赋予双精度格式位模式的值是使用以下方法构成:将二进制基 数点插入到紧邻小数最高有效位的左侧,将一个隐含位插入到紧邻二进制点的左侧。如此 构成的数字称作有效数字。之所以称为隐含位的原因是,在双精度格式位模式中没有显式 地指定其值,但偏置指数字段的值隐式指定了该值。 对于双精度格式,正规数和次正规数的差别在于正规数有效数字的前导位 (二进制点左 侧的位)为 1,而次正规数有效数字的前导位为 0。在 IEEE 标准 754 中,双精度格式次 正规数称为双精度格式非规格化数。 在双精度格式正规数中 52 位小数加上隐含前导有效数位提供了 53 位精度。 表 2-5 中给出了重要的双精度存储格式位模式的示例。第二列中的位模式显示为两个 8 位十六进制数。对于 SPARC 体系结构,左侧是较低地址的 32 位字的值,右侧是较高地 址的 32 位字的值,而对于 x86 体系结构,左侧是较高地址的字,右侧是较低地址的字。 最大正正规数是以 IEEE 双精度格式表示的最大有限数。最小正次正规数是以 IEEE 双精 度格式表示的最小正数。最小正正规数通常称为下溢阈值。(最大和最小正规数和次正规 数的十进制值是近似的;对于所示的数字来说,它们是正确的。) s = 0; e = 2047; f = 0 (f 中的所有位均为零) +INF (正无穷大) s = 1; e = 2047; f = 0 (f 中的所有位均为零) -INF (负无穷大) s = u; e = 2047; f ≠ 0 (f 中至少有一位不为零) NaN (非数) 表 2-5 双精度存储格式位模式及其 IEEE 值的位模式 通用名称 位模式 (十六进制) 十进制值 + 0 00000000 00000000 0.0 - 0 80000000 00000000 -0.0 1 3ff00000 00000000 1.0 2 40000000 00000000 2.0 最大正规数 7fefffff ffffffff 1.7976931348623157e+308 最小正正规数 00100000 00000000 2.2250738585072014e-308 最大次正规数 000fffff ffffffff 2.2250738585072009e-308 最小正次正规数 00000000 00000001 4.9406564584124654e-324 + 7ff00000 00000000 无穷 – fff00000 00000000 负无穷 非数 7ff80000 00000000 NaN 表 2-4 IEEE 双精度格式位模式表示的值 ( 续 ) 双精度格式位模式 值 ∞ ∞