Everything

 

-relaxed_math 【V2.00.00以降】


厳密さより効率を重視した浮動小数点演算コードを生成します。

[指定形式]

-relaxed_math

 

-

省略時解釈

なし

[詳細説明]

-

浮動小数点演算に対して,C言語規格やIEEE754に厳密ではないが,コードサイズや実行速度について効率のよい演算コードの生成を行います。

-

また,次のオプションを同時に指定したとみなします。

-

-Xuse_fmaf

-

-use_recipf

-

-approximate 【V2.02.00 以降】

-

本オプションを複数回指定した場合,1回指定した場合と同じ意味になります。このとき,警告を出力しません。

[備考]

本オプションを指定した場合,次のように浮動小数点演算を扱い,演算結果がC言語規格やIEEE754の厳密な規定と異なる場合があります。

-

0.0の符号の意味を無視します。

-

演算により例外や精度誤差が発生しないと仮定して,代数的な性質を利用した数式の変形を行います。

-

比較演算,その他の演算に非数,無限大の入出力が無いと仮定します。
これらの値を扱うプログラムである場合,意図しない実行結果になる可能性があるため,本オプションを使用する場合は注意が必要です。

例)
このプログラムは,通常はxまたはyが非数である場合,関数func2を呼び出しません。
しかし,本オプション指定時は,非数の入力を想定しないかわりに効率のよい(*)コードを生成するため,関数func2を呼び出す場合があります。

(*) -Xfloat=soft指定時に顕著に変化します。

 

void func1(double x, double y) {
  if (x < y) {
    func2();
  }
}