在特殊情况下,我在两个变量中有数字0.068404(这些在程序运行时会发生变化,所以我不知道它在里面是什么)。
当我自己减去它时,它会给出无限或精确的数字-9。所有布尔操作都给我一个错误的结果。
有什么想法吗?
答案 0 :(得分:3)
您可能会遇到浮点舍入问题,这是一个一次又一次处理的非常常见的问题。请考虑以下程序:
float a, b, c;
cin >> a;
b = a;
a = a*3;
a = a/3;
c = a - b;
cout << c << " " << (c == 0) << endl;
根据所有权利,您应该打印0 1
,但是当您尝试here时。你得到:
2.48353e-09 0
这是因为浮点数不能代表每个基数为10的数字,因此舍入误差使得直接比较成为一个坏主意。你应该总是使用epsilon,即:
abs(a - b) < eps
其中eps
类似于1e-6。