对于浮点精度的问题,我为浮点数定义了我的自定义比较函数:
bool cmp(double a, double b)
{
if(abs(a - b) <= eps) return false;
return a < b;
}
然后我对一些浮点数数组调用排序。我听说一些不好的比较功能会导致排序分段错误。我只是想知道cmp
排序是否可以正常工作?一方面,cmp
满足关联规则。但另一方面,cmp(x - eps, x) == false
&&cmp(x, x + eps) == false
并不意味着cmp(x - eps, x + eps) == false
.
我没有直接对浮点数使用排序,因为我想要排序的是pair<double, double>
. 例如:
(1,2), (2,1), (2.000000001, 0)
我想将 2 和 2.000000001 视为相同,并期望结果为:
(1,2), (2.000000001, 0), (2,1)