1. ホーム
  2. performance

[解決済み] gccのffast-mathは実際に何をするのですか?

2022-04-15 07:43:34

質問

gccの --ffast-math フラグはフロート演算の速度を大幅に向上させることができ、IEEE標準から外れていますが、オンになっているときに実際に何が起こっているのかについての情報が見つからないようです。どなたか詳細を説明し、フラグがオンかオフかで何かがどう変わるのか、明確な例を挙げていただけませんか?

S.O.で似たような質問を探ってみましたが、ffast-mathの仕組みを説明するものは見つかりませんでした。

解決方法は?

ご指摘の通り、厳密なIEEEコンプライアンスを維持しない最適化が可能になります。

その一例がこれです。

x = x*x*x*x*x*x*x*x;

になります。

x *= x;
x *= x;
x *= x;

浮動小数点演算は連想演算ではないため、演算の順序や因数分解は丸め誤魔化して結果に影響します。したがって、この最適化は、厳密なFPの動作の下では行われません。

GCCが実際にこの特定の最適化を行うかどうか、実際に確認したわけではありません。しかし、考え方は同じです。