Sun Studio 12:C 用户指南

2.4 浮点,非标准模式

缺省情况下,IEEE 754 浮点运算“不停止”,并且下溢是“渐进的”。下面给出了概括性说明,有关详细信息,请参见《数值计算指南》。

不停止意味着遇到除数为零、浮点下溢或无效操作异常时执行不会停止。例如,考虑以下算式,其中 x 为零,y 为正数:

z = y / x;

缺省情况下,z 设置为值 +Inf,执行不会停止。但是,如果设置 -fnonstd 选项,此代码会导致退出,如核心转储。

下面是渐进下溢的工作方式。假设您有下列代码:


x = 10;
for (i = 0; i < LARGE_NUMBER; i++)
x = x / 10;

第一次执行循环时,x 设置为 1;第二次执行循环时,设置为 0.1;第三次执行循环时,设置为 0.01,依此类推。最后,x 达到比较低的值,以致机器无法表示其值。下次循环运行时将出现什么情况?

假设可表示的最小数为 1.234567e-38

下次循环运行时,将通过去掉一位尾数并且指数减去 1 来修改该数,因此新值为 1.23456e-39,然后为 1.2345e-40,依此类推。这称为“渐进下溢”,它是缺省行为。在非标准模式下,不会发生这种“去位”情况;通常,x 被简单地设置为零。