Sun Studio 12:Fortran 用户指南

3.4.39 –fsimple[ ={1|2|0}]

选择浮点优化首选项。

允许优化器作出有关浮点运算的简化假定。(请参见《Fortran 编程指南》的“浮点运算”一章。)

为了获得一致的结果,请使用同一 -fsimple 选项编译程序的所有单元。

缺省值为:

各种浮点简化级别如下:

–fsimple=0

不允许简化假定。保持严格的 IEEE 754 一致性。

–fsimple=1

允许适度的简化。产生的代码与 IEEE 754 不完全一致,但多数程序所产生的数值结果没有更改。

如果使用 -fsimple=1,优化器可以假定以下内容:

  • 在进程初始化之后,IEEE 754 缺省舍入/捕获模式不发生改变。

  • 可以删除不生成可见结果(潜在的浮点异常除外)的计算。

  • 以无穷大或 NaN(“不是数”)为操作数的计算不需要将 NaN 传播到其结果;例如,x*0 可以由 0 替换。

  • 计算不依赖于零的符号。

如果使用 -fsimple=1,则允许优化器进行完全优化,而不考虑舍入或异常。特别是,在运行时舍入模式包含常量的情况下,浮点计算不能由产生不同结果的计算替换。

–fsimple=2

—fsimple=1 外,还允许主动浮点优化。这会导致某些程序因表达式求值方式的变化而生成不同的数值结果。尤其是,使用 -fsimple=2 可能会违反如下 Fortran 标准规则:要求编译器用显式圆括号将子表达式括起来以控制表达式求值顺序。对于依赖此规则的程序,这会导致数值舍入差异。

例如,如果使用 -fsimple=2,编译器可能将 C-(A-B) 计算为 (C-A)+B,从而违反了有关显式圆括号的标准规则(如果生成的代码已更好地进行了优化)。编译器还可能将 x/y 的重复计算替换为 x*z,其中的 z=1/y 计算一次并暂时保存,以消除成本较高的除法运算。

对于依赖浮点运算的特定属性的程序,不得使用 -fsimple=2 进行编译。

即使使用 -fsimple=2,也仍然不允许优化器在程序中引入浮点异常,如果不在这样的程序中引入浮点异常,该程序将不生成任何异常。

–fast 会选择 -fsimple=2