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

退出打印视图

更新时间: 2015 年 1 月
 
 

5.5.5 隐式更高精度

在一些情况下,表达式的求值精度可能高于源代码中显式声明的精度。使用 x87 扩展精度寄存器来计算涉及单精度或双精度变量的表达式时,会出现这种情况。在使用混合乘加运算替换乘法加法对时,也会出现这种情况。

  • 避免将乘加对优化为混合乘加运算。在 –fast 后使用 –fma=none

  • 如果必须使用 –xarch=386 并且没有显式使用长双精度型类型,则在所有变量为浮点数的情况下使用 –fprecision=single 编译,或者在所有变量为双精度的情况下使用 –fprecision=double 编译,可以减少扩展精度表达式求值的影响。但是,如果在 –xarch=386 下使用 Fortran complex*8 变量,则没有方法确保所有表达式求值以单精度进行。最好使用 –m64 而不是 –m32,因为寄存器中传递的函数值精度与函数的精度相同。