【发布时间】:2012-05-29 00:51:07
【问题描述】:
假设 t,a,b 都是双精度(IEEE 标准 754)变量,并且 a、b 的两个值都不是 NaN(但可能是 Inf) .
在t = a - b之后,我一定有a == b + t吗?
【问题讨论】:
-
我相信下溢的结果将是未定义的,第二个表达式中的溢出也是如此,所以没有。如果有人能证实这一点,那就太好了。
-
啊,我猜这种确认溢出对于浮点也是未定义的:
As with any other arithmetic overflow, if the result does not fit in the space provided, the behavior is undefined. -
在符合 IEEE 754 的 C 实现中,没有用于任何浮点运算的 UB。所有结果都经过严格定义。
-
如果 a=b=Inf 然后 t=NaN 并且第二个等式失败。您可能会找到另一个使用负零的示例。
-
@RaymondChen:负零也是一个很好的例子,但是对于一些不那么晦涩的情况,请参阅我的答案......
标签: c++ c floating-point ieee-754