-relaxed_math 【V2.00.00以降】
|
厳密さより効率を重視した浮動小数点演算コードを生成します。
[指定形式]
なし
[詳細説明]
- | 浮動小数点演算に対して,C言語規格やIEEE754に厳密ではないが,コードサイズや実行速度について効率のよい演算コードの生成を行います。 |
- | また,次のオプションを同時に指定したとみなします。 |
- | -approximate 【V2.02.00 以降】 |
- | 本オプションを複数回指定した場合,1回指定した場合と同じ意味になります。このとき,警告を出力しません。 |
[備考]
本オプションを指定した場合,次のように浮動小数点演算を扱い,演算結果がC言語規格やIEEE754の厳密な規定と異なる場合があります。
- | 演算により例外や精度誤差が発生しないと仮定して,代数的な性質を利用した数式の変形を行います。 |
- | 比較演算,その他の演算に非数,無限大の入出力が無いと仮定します。
これらの値を扱うプログラムである場合,意図しない実行結果になる可能性があるため,本オプションを使用する場合は注意が必要です。
例)
このプログラムは,通常はxまたはyが非数である場合,関数func2を呼び出しません。
しかし,本オプション指定時は,非数の入力を想定しないかわりに効率のよい(*)コードを生成するため,関数func2を呼び出す場合があります。
(*) -Xfloat=soft指定時に顕著に変化します。 |
void func1(double x, double y) {
if (x < y) {
func2();
}
}
|