所以,我有两个双变量,我想比较它们直到3位小数。所以,对于变量(例如):
double x = 0.695999;
double y = 0.695111;
如果我检查(x == y),它应该返回true(因为两者都相等,直到3位小数)。谢谢!
答案 0 :(得分:6)
您可以(ab)使用整数比较和截断:
int is_equal_3decplaces(double a, double b) {
long long ai = a * 1000;
long long bi = b * 1000;
return ai == bi;
}
正如@ DavidRF的基准测试所表明的那样,与计算绝对值相比,该解决方案在性能方面略有提升(~40%)。
答案 1 :(得分:4)
您应该实际检查差异是否小于可预先配置的小增量,除非您总是希望检查三个小数位。例如:
#define epsilon ((double)0.000999)
bool is_approximately_equal(double x, double y)
{
return (abs(x - y) < epsilon);
}
请注意,C ++上的abs具有double的abs版本。在C中你必须用-ve值做一些事情。