Oracle® Solaris Studio 12.4:数值计算指南

退出打印视图

更新时间: 2015 年 1 月
 
 

2.3.2 IEEE 算法如何处理下溢?

IEEE 标准 754 选择渐进下溢作为处理下溢结果的首选方法。这种方法可以归结为定义两种存储值的表示方法:正规数和次正规数。

请记住,正规浮点数的 IEEE 格式:

(-1)s × (2(e–bias)) × 1.f

其中 s 是符号位,e 是偏置指数,f 是小数。要完整地指定数字,仅需要存储 sef。由于对于正规数,将有效数字的隐式前导位定义为 1,所以需要存储它。

于是,可以存储的最小正正规数具有负的最大数量级指数和全为零的小数。如果前导位是零而不是一,则可以容纳更小的数字。在双精度格式中,由于小数部分的长度为 52 位(约 16 位十进制数字),这可以有效地将最小指数从 10‐308 扩展到 10‐324。这些是次正规数;返回次正规数(而不是将下溢结果刷新为零)就是渐进下溢

很明显,次正规数越小,其小数中的非零位就越少;生成次正规数结果的计算与正规操作数计算所遵循的相对舍入误差边界不同。但是,有关渐进下溢的主要事实是其使用以下隐含条件:

  • 下溢结果不必允许牺牲比普通舍入误差更大的准确性。

  • 当结果非常小时,加法、减法、比较和余数运算都总是准确的。

请记住,次正规浮点数的 IEEE 格式:

(-1)s × (2(-bias+1)) × 0.f

其中 s 是符号位,偏置指数 e 是零,f 是小数。请注意,隐式 2 的幂偏差比正规格式偏差大一,隐式前导小数位是零。

渐进下溢允许扩展可表示数的下限。它不是使值出行问题的最小限度,而是其他相关的误差。算法使用的是较其他系统误差界限更小的次正规数。下一节将介绍渐进下溢的数学根据。