这个问题展示了一个非常有趣的现象:非规范化的浮点数会使代码变慢一个数量级以上。
在接受的答案中很好地解释了这种行为。但是,有一条评论,目前有 153 票,我无法找到令人满意的答案:
在这种情况下,为什么编译器不只是删除 +/- 0 ?!?—— 迈克尔·多根
旁注:我的印象是 0f 是/必须是完全可表示的(此外 - 它的二进制表示必须全为零),但在 c11 标准中找不到这样的声明。证明这一点的引述或反驳这一主张的论点将是最受欢迎的。无论如何,迈克尔的问题是这里的主要问题。
实现可能会给零和不是浮点数的值(例如无穷大和 NaN)一个符号,或者可能使它们无符号。