c++ - 检查双精度值是否为 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
.
谢谢
我应该将“从未分配”语句澄清为“默认初始化后从未分配”。
解决方案
如果您需要知道浮点变量是否准确0.0
,-0.0
那么使用val == 0.0
.
如果您需要知道它是否准确0.0
,-0.0
那么您必须验证您使用的是 ieee-754 浮点并检查位表示是否全为零。
推荐阅读
- php - 在 ARM 服务器上运行 node.js / vue.js 和 PHP 的性能问题
- css - Flex 或网格容器,其大小与其内容一样大,每个项目的大小相同
- python - 第一和第三四分位数的计算
- r - 使用 tibble 类将 R 中的数据集作为双精度导入
- java - java.lang.VerifyError: JVMVRFY010 多个jsrs使用单返回
- java - @Autowired 比嵌套的内部 bean 构造函数更优越?
- weblogic - Oracle 12c Fusion Middleware(Weblogic 和 Forms & Reports)中等效的“opmnctl status”命令是什么?
- python - 从头开始计算逻辑回归的对数损失
- java - 泛型类和类类型的问题
- api - 使用 Tuleap API 上传文件时出现错误,如何执行它