浮動小数点値の場合、 1a + bと同じであることが保証されていますか? b + a
これはIEEE754で保証されていると思いますが、C++標準ではIEEE754を使用する必要があるとは規定していません。関連する唯一のテキストは [expr.add]#3 からのようです:
二項 + 演算子の結果は、オペランドの合計です。
算術演算「合計」は交換可能です。ただし、数学演算「合計」も結合的ですが、浮動小数点の加算は結合的ではありません。したがって、数学における「合計」の可換性は、この引用が C++ における可換性を指定していることを意味すると結論付けることはできないように私には思えます。
脚注 1: +0 と-0を区別するため
のビットごとの同一の「同じ」 。IEEE754 はtrue として扱いますが、符号付きゼロに関する特定の規則もあります。 どちらもIEEE754で生成され、同じ大きさの反対符号の値の追加についても同じです。IEEE セマンティクスに従ったは、それが基準である場合、符号付きゼロの非可換性を隠します。memcmp==+0.0 == -0.0+0 + -0-0 + +0+0==
また、a+b == b+aいずれかの入力が NaN の場合、IEEE754 演算では false になります。
memcmpは、2 つの NaN が同じビットパターン (ペイロードを含む) を持っているかどうかを示しますが、有効な数学演算の可換性とは別に NaN の伝播規則を考慮することができます。