我正在编写一个c ++函数来从矩阵中定位给定的double(即返回索引,如(i,j))。 这是我写的功能:
std::pair<int,int> locate(std::vector<std::vector<double> >&t, double d) {
std::pair<int,int> p = make_pair(0,0); // initialising
cout<<"double given : "<<d<<"\n";
for (int i = 0; i < t.size(); ++i)
{
for (int j = 0; j < t[i].size(); ++j)
{
if (d==t[i][j])
{
p = make_pair(i,j);
cout<<"YES";
return p;
}
else {
cout<<"NO ";
continue;
}
}
cout<<"\n";
}
}
给定的矩阵是
50400.5 43220.8 46053.4 46700.8 44800.8
50460.5 43160.8 46293.4 46640.8 44540.8
50620.5 43220.8 45833.4 46720.8 44480.8
,我得到的输出是
double given : 43220.8
NO NO NO NO NO
NO NO NO NO NO
NO NO NO NO NO
43220.8 : 0,0
我正在调用它
std::pair<int,int> p;
double d = 43220.8;
p = locate(raw_1_set_man,d); // raw_1_set_man is the matrix
cout<<"43220.8 : "<<p.first<<","<<p.second<<"\n";
控制未进入if块
我哪里做错了?
答案 0 :(得分:1)
使用epsilon进行比较:
bool doubleEqual(double d1, double d2, double epsilon = std::numeric_limits<T>::epsilon())
{
return d1 <= d2 + epsilon && d1 + epsilon >= d2;
}
或某些更符合您目的的epsilon。不过,请谨慎使用此方法,并考虑对此答案的评论以及对该问题的评论。