有些应用程序实际上执行了许多非常接近零的计算。这在计算残数或微分修正的算法中很常见。为获得在数值上安全的最大性能,需要采用扩展精度运算来执行关键计算。如果应用程序是单精度应用程序,可采用双精度执行关键计算。
示例:采用单精度的简单点积计算:
sum = 0 DO i = 1, n sum = sum + a(i) * b(i) END DO |
如果 a(i) 和 b(i) 非常小,会出现很多下溢。通过强制计算采用双精度,计算点积时会具有更高的准确性,并且可避免出现下溢情况:
DOUBLE PRECISION sum DO i = 1, n sum = sum + dble(a(i)) * dble(b(i)) END DO result = sum |
通过增加对库例程 nonstandard_arithmetic() 的调用,或通过使用 -fns 选项编译应用程序的主程序,可以强制 SPARC 处理器在涉及到下溢时(存储零)像较早的系统一样进行处理。