这个question展示了一个非常有趣的现象:denormalized浮点数会使代码变慢超过一个数量级。
这种行为在accepted answer中得到了很好的解释。然而,有一条评论目前有153个赞,我无法找到令人满意的答案:
为什么编译器不直接在这种情况下删除+/-0呢?!? - Michael Dorgan
旁注:我有这样的印象,即0f是/必须是精确可表示的(此外-它的二进制表示必须全部为零),但在c11标准中找不到这样的声明。证明这一点或反驳这一主张的论据将是最受欢迎的。无论如何, Michael 的问题才是这里的主要问题。
实现可以给零和非浮点数(如无穷大和NaN)赋予符号,也可以将它们保留为无符号数。
+0.f
或-0.f
被规范化了 - 而是数组中被加零的值被规范化了(并导致了减速)。 - Michael Burr/fp:fast
选项可能会导致编译器优化+0.f
- 我不知道。 - Michael Burr