2

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

double x = 0.695999;
double y = 0.695111;

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

4

2 回答 2

7

您可以(ab)使用整数比较和截断:

int is_equal_3decplaces(double a, double b) {
    long long ai = a * 1000;
    long long bi = b * 1000;
    return ai == bi;
}

正如@DavidRF 的基准所显示的那样,与计算绝对值相比,此解决方案的性能略有提高(约 40%)。

于 2013-03-03T07:54:25.093 回答
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 值做一些事情。

于 2013-03-03T07:59:20.423 回答