
エントリーの編集

エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
C言語において浮動小数点数の足し算は可換か:FMAがある場合
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています

- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
C言語において浮動小数点数の足し算は可換か:FMAがある場合
以前こういう記事を書きました: 浮動小数点数の足し算と掛け算は可換か 要約すると「浮動小数点数の足... 以前こういう記事を書きました: 浮動小数点数の足し算と掛け算は可換か 要約すると「浮動小数点数の足し算と掛け算はNaNのビットパターンを考慮しない限り可換だよ」という内容です。 プリミティブな足し算としてはそうなのですが、C言語は a * b + t の形の式をFMA fma(a, b, t) に変換することを許容しています(この話は「浮動小数点演算の結果が環境依存なのはどんなときか」でちらっと触れました)。このような変換が存在しても足し算は「可換である」と言えるでしょうか? つまり、a * b + c * d という式は fma(a, b, c * d) にコンパイルされる可能性もあれば、fma(c, d, a * b) にコンパイルされる可能性もあるため、ソースコード上で左右を入れ替えると違う結果が出るのではないか?という話です。 実証コード この挙動を確認するコードを以下に用意します