对于浮点值a:对于a的有限值,a*0.0 == 0.0是否总是求值为真?

For a floating point value a: Does a*0.0 == 0.0 always evaluate true for finite values of a?

本文关键字:是否 对于 于浮点      更新时间:2023-10-16

我一直假设以下测试对于somefloat的有限值(没有INF,没有NAN)总是成功的:

assert(somefloat*0.0==0.0);

在乘0优化中指出double a=0.0double a=-0.0严格来说不是一回事。

所以我想知道这是否会导致某些平台上的问题,例如,上述测试的结果是否取决于a是阳性还是阴性?

如果您的实现使用IEEE 754算法(大多数使用),则正负零比较起来相等。由于对于有限的a,表达式的左边只能为正零或负零,因此断言将始终为真。

如果它使用了其他类型的算术,那么只有实现者(希望是特定于实现的文档)才能告诉您。有争议的是(参见注释),标准的措辞可以被理解为暗示它们在任何情况下都必须比较相等,并且肯定没有一个相同的实现会这样做。

-0.0 == 0.0根据双比较规则

非谓语形式的值(+负无穷,Nan) somefloat * 0.0 ! = 0.0。

你的assert永远不会失败,只要somefloat不会失败无穷或NaN。在不支持无穷或的系统上