comparing float variable
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Most effective way for float and double comparison
How dangerous is it to compare floating point values?
号
我有
1 2 3 4 5 6 7 8 9 10 | const double epsilon = 1e-12; if(fabs(input - M) < epsilon) //input == M { //... } if(fabs(input - M) >= epsilon) // input != M { //... } |
epsilon的值越小,比较就越准确,因此它越有可能告诉您两个值不相等,而您希望它们被视为相等。epsilon的值越大,它告诉你结果是相等的概率就越大,而事实上你希望它们不相等。应根据手头任务的具体情况选择epsilon的值。
在比较浮点数时,必须将它们比较为"关闭"而不是"相等"。根据需要,有多种方法可以定义"关闭"。然而,一个典型的方法可能是:
1 2 3 4 5 6 7 8 9 10 11 | namespace FloatCmp { const float Eps = 1e-6f; bool eq(float a, float b, float eps = Eps) { return fabs(a - b) < eps; } //etc. for neq, lt, gt, ... } |
号
然后,使用