对于浮点值,是否可以保证a + b == b + a
?
我相信这在IEEE754中是可以保证的,但是C++标准未指定必须使用IEEE754。唯一相关的文字似乎来自[expr.add]#3:
数学运算“和”是可交换的。但是,数学运算“和”也是关联的,而浮点加法绝对不是关联的。因此,在我看来,我们不能得出结论:数学中“sum”的可交换性意味着该报价指定了C++中的可交换性。
最佳答案
甚至不需要a + b == a + b
。子表达式之一可以比另一子表达式更精确地保存加法结果,例如,当使用多个加法要求将一个子表达式临时存储在内存中时,而另一个子表达式可以保存在寄存器中(精度更高)。
如果不能保证a + b == a + b
,则不能保证a + b == b + a
。如果a + b
不必每次都返回相同的值,并且值不同,则其中之一不一定等于b + a
的一种特定评估。