本节概述了 IEEE 754 浮点缺省运算,即“不停止”。 下溢是“渐进式的”。 有关更多详细信息,请参见Oracle Developer Studio 12.5:数值计算指南。
不停止意味着遇到除数为零、浮点下溢或无效操作异常时执行不会停止。例如,考虑以下算式,其中 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 将被简单地设置为零。