我总是假设以下测试总是会成功的有限值(不是INF,不是NAN)的一些浮点数:
assert(somefloat*0.0==0.0);
在Multiply by 0 optimization年,据说双a = 0.0和双a = -0.0并不严格地说同样的事情.
所以我想知道这是否会导致某些平台上的问题,例如上述测试的结果可能取决于蜜蜂的阳性或阴性.
解决方法
如果您的实现使用IEEE 754算术(大多数),则正和负0将相等.由于您的表达式的左侧只能为正值或负值为有限的a,断言将始终为真.
如果它使用某种其他类型的算术,那么只有实现者,希望实现特定的文档可以告诉你.可以说(见评论),标准的措词可以被认为意味着他们必须在任何情况下比较平等,当然没有一个理智的实施.