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 のデフォルトの丸め/トラップモードは、プロセス初期化後も変化しない。

  • 浮動小数点例外を除いて、外に現れない結果 (中間結果) を生成する演算は削除してもよい。

  • 演算対象として無限または非数を伴う演算において、非数を結果に反映させる必要はない。たとえば、x*00 で置き換えてよい。

  • 演算がゼロの符号に応じて変化することはない。

-fsimple=1 を指定すると、オプティマイザは必ず丸めまたは例外に応じた、完全な最適化を行います。特に、浮動小数点演算を、実行時に一定に保たれる丸めモードにおいて異なる結果を生成する浮動小数点演算と置き換えることはできません。

-fsimple=2

—fsimple=1 に加えて、積極的な浮動小数点の最適化を許可します。このため、一部のプログラムは、数式の評価方法の変更が原因で、異なる数値結果を出すことがあります。特に、Fortran の標準規則は、部分式の明示的な括弧を重視して式の評価の配列を制御するため、-fsimple=2 によって違反が生じることがあります。その結果、Fortran の規則に依存するプログラムにおいて、数値の丸めに差異が生じる可能性があります。

たとえば、-fsimple=2 を使用すると、コンパイラは C-(A-B)(C-A)+B として評価するため、最終的なコードがより良好に最適化されている場合、明示的な括弧について標準規則の違反が生じます。また、コンパイラは、x/y の反復演算を x*z で置き換えることがあります。 この場合、z=1/y が 1 回だけ計算されて一時的に保存されるため、コストのかかる割り算が除去されます。

浮動小数点演算の特定プロパティーに依存するプログラムは、-fsimple=2 でコンパイルしないでください。

ただし、-fsimple=2 を指定していても、-fsimple=2 を指定しなければ発生しない浮動小数点例外をプログラムに発生させるような最適化はできません。

-fast-fsimple=2 を選択します。