检查是否已为 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 浮点数并检查位表示是否全为零。
我知道在 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 浮点数并检查位表示是否全为零。