假设t
,a
,b
都是 double (IEEE Std 754)变量,a
, b
不是 NaN
(但可能是 Inf
)。
在 t = a - b
之后,我一定有 a == b + t
吗?
最佳答案
绝对不是。一个明显的例子是 a=DBL_MAX
,b=-DBL_MAX
。那么t=INFINITY
,所以b+t
也是INFINITY
。
可能更令人惊讶的是,有些情况下会发生这种情况而没有任何溢出。基本上,它们都是 a-b
不准确的形式。例如,如果 a
是 DBL_EPSILON/4
并且 b
是 -1
,则 a-b
为 1(假设默认舍入模式),a-b+b
则为 0。
我提到第二个示例的原因是,这是在 IEEE 算法中强制舍入到特定精度的规范方法。例如,如果您有一个 [0,1) 范围内的数字并希望将其强制四舍五入到 4 位精度,您可以先加然后减 0x1p49
。
关于c++ - IEEE Std 754 Floating-Point : let t := a - b, 标准是否保证 a == b + t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791894/