首页 > 解决方案 > 检查双精度值是否为 0.0 的有效方法

问题描述

我知道使用带有 's 的相等比较器有很多陷阱,double所以我对如何实现对等于的值的检查持谨慎态度 0.0。基本上,我想知道一个值是否从未被赋值,或者它是否是故意0.0用文字赋值的。我不想知道它是否接近于零(例如 - 0.0000000001)。

所以我在使用val == 0.0或类似的东西之间进行辩论:

bool isZero(double val)
{
    if (val > std::numeric_limits<double>::min()) {
        return false;
    } else if (val < -std::numeric_limits<double>::min()) {
        return false;
    }
    return true;
}

这两种说法有什么区别吗?我应该偏爱一个吗?我特别关心val == -0.0.

谢谢


我应该将“从未分配”语句澄清为“默认初始化后从未分配”。

标签: c++floating-pointdouble

解决方案


如果您需要知道浮点变量是否准确0.0-0.0那么使用val == 0.0.

如果您需要知道它是否准确0.0-0.0那么您必须验证您使用的是 ieee-754 浮点并检查位表示是否全为零。


推荐阅读