c++ - 双重数学和布尔检查给出错误的答案
问题描述
拿这个 c++ 代码:
double d = 0.3028 + 0.0028;
cout << d << endl;
if (d == 0.3056)
cout << "match" << endl;
else
cout << "not a match" << endl;
为什么输出“不匹配”?
解决方案
那是因为浮点数是如何存储在内存中的。这是一篇很好的文章:https ://dev.to/visheshpatel/how-floating-point-no-is-stored-memory-47od
相反,如果“几乎相等”,则应检查浮点数(和双精度数)。在您的情况下,如果您只对小数点后 4 位感兴趣,那么您可以检查差异是否低于 0.00001。所以:
float epsilon = 0.00001;
double a = d; //your value
double b = 0.3056; //the value to which you are comparing
bool equal_ab = abs(a - b) < epsilon;
推荐阅读
- google-cloud-platform - Dataprep - 将数据附加到 BigQuery 表
- json - Python 3 - 从嵌套字典中的键中提取值
- c# - Swagger UI - 在不同控制器下显示端点
- python - python中的方位角计算(没有地理定位库)
- r - 根据数据框中两个不同列之间的匹配删除行
- python - 如何修复“ValueError:color kwarg 每个数据集必须有一种颜色。提供了 4 个数据集和 1 种颜色”?
- reactjs - 在目标“FBReactNativeSpec”和“Yoga”之间循环依赖;建筑可能会产生不可靠的结果
- python - ipynb 到 py,将所有带有 name* 的文件移动到文件夹
- symfony - 如何在 Symfony Configuration.php 中定义一组标量数组?
- android - Kotlin Unresolved Reference 和类函数未出现在自动完成选择中