检查是否已为 double 分配值 0.0 的有效方法

Valid way to check that a double has been assigned a value of 0.0

我知道在 double 中使用相等的比较器有很多陷阱,所以我对如何检查等于 完全 [=30 的值持谨慎态度=] 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.

的下溢情况

谢谢


我应该向 'never assigned after default initialization' 澄清 'never assigned' 的陈述。

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

没有任何问题

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