比较arduino中的两个双变量

时间:2013-03-03 07:52:23

标签: c arduino decimal

所以,我有两个双变量,我想比较它们直到3位小数。所以,对于变量(例如):

double x = 0.695999;
double y = 0.695111;

如果我检查(x == y),它应该返回true(因为两者都相等,直到3位小数)。谢谢!

2 个答案:

答案 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值做一些事情。