7

我在读一本书(CSAPP)。书中写道——

浮点加法满足以下单调性属性:
if a>=bthen(x + a) >= (x+b)对于任何值ab并且x除了NaN. 无符号或二进制补码加法不遵守实数(和整数)加法的这一特性。

浮点如何服从它?
为什么无符号或二进制补码加法不遵守它?

4

1 回答 1

8

C 中的无符号整数基本上形成一个环,即它们最终会环绕。例如,对一个无符号整数连续加 1 会不断增加它,直到它回绕为零,这意味着加一产生的结果至少小于 1,因此不满足单调性。

有符号整数会溢出,这更复杂,但在 C 中它也是未定义的行为,所以我们应该排除它。

对于 C 中的浮点数,根据 IEEE745,将两个正数相加(这意味着它们都不是 NaN,因为不知道 NaN 是正数还是负数)产生大于或等于两个加数中较大者的结果:要么通过形成一个确实更大的结果,要么通过产生一个加数,因为另一个加数被吸收,或者通过产生无穷大。重要的一点是要注意,加法满足单调性,但不一定是严格单调性

于 2017-08-12T16:04:41.297 回答