DrT*_*arr 7 c++ floating-point double
我知道有很多陷阱与使用等比较具有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;
}
Run Code Online (Sandbox Code Playgroud)
这两种说法会有区别吗?我应该偏爱一个吗?我特别关注下溢场景,其中val == -0.0.
谢谢
我应该将“从未分配”声明澄清为“默认初始化后从未分配”。
如果您需要知道浮点变量是否精确0.0,-0.0那么使用val == 0.0.
如果您需要知道它是否准确,0.0那么-0.0您必须验证您是否使用 ieee-754 浮点并检查位表示是否全为零。