Raú*_*año 3 c++ algorithm comparison performance
以这个问题为基础,众所周知,我们不应该将equals比较运算应用于十进制变量,因为数字错误(它没有绑定到编程语言):
bool CompareDoubles1 (double A, double B)
{
return A == B;
}
Run Code Online (Sandbox Code Playgroud)
它的代码是不对的.我的问题是:
例如:
bool CompareDoubles1 (double A, double B)
{
double a = round(A,4);
double b = round(B,4)
return a == b;
}
Run Code Online (Sandbox Code Playgroud)
它是正确的?
编辑
我正在考虑round是一个采用double(number)和int(precition)的方法:
bool round (float number, int precision);
Run Code Online (Sandbox Code Playgroud)
编辑 我认为用这个比较方法可以更好地理解我对这个问题的意思:
bool CompareDoubles1 (double A, double B, int precision)
{
//precition could be the error expected when rounding
double a = round(A,precision);
double b = round(B,precision)
return a == b;
}
Run Code Online (Sandbox Code Playgroud)
通常,如果您真的需要比较浮动值,则需要指定容差:
bool CompareDoubles1 (double A, double B, double tolerance)
{
return std::abs(A - B) < tolerance;
}
Run Code Online (Sandbox Code Playgroud)
选择合适的公差将取决于值的性质和产生它们的计算.
舍入是不合适的:两个非常接近的值,你想要比较相等,可能会在不同的方向上舍入并且看起来不相等.例如,当舍入到最接近的整数,0.3并且0.4将比较相等,但0.499999并0.500001不会.