浮点数加法的关联属性

Ted*_*Ted 0 floating-point

设 x、y 和 z 为浮点数。那么 (x+y)+z =/= x+(y+z) 是真的吗?有人能给我举个例子吗?我希望 x、y 和 z 是浮点数(IEEE 表示),而不仅仅是任何实数。

Eri*_*hil 5

正如您提出的问题一样,这通常不正确。存在 x、y 和 z 使得(x+y)+z = x+(y+z)。但您可能想问是否始终如此(x+y)+z = x+(y+z)。这并不总是正确的。

\n

一个明显的反例是 (2 64 + \xe2\x88\x922 64 ) + 1 和 2 64 + (\xe2\x88\x922 64 + 1)。对于 64 位二进制 IEEE-754 算术,前者是 0 + 1 = 1,后者是 2 64 + \xe2\x88\x922 64 = 0。在后者中,由于 \xe2 的大小而丢失了 1 \x88\x922 64太大了,总和没有足够的精度来包含 1。

\n

还有一些更微妙的情况,其中一个数字的一​​部分丢失了。

\n