我有一个double[9]
并想检查它是否包含值(1,0,0,0,1,0,0,0,1)。有比这更清洁的方式吗?
if (ornt1[0] == 1 && ornt1[1] == 0 && ornt1[2] == 0
&& ornt1[3] == 0 && ornt1[4] == 1 && ornt1[5] == 0
&& ornt1[6] == 0 && ornt1[7] == 0 && ornt1[8] == 1 )
我正在使用C ++。
答案 0 :(得分:6)
严格比较双值不是一个好主意。我建议你创建一个常数数组进行比较,然后使用一个循环并使用公差(例如1e-9):
bool doublesEqual(double a, double b) {
return fabs(a - b) < 1e-9;
}
const double expected[9] = {1,0,0,0,1, 0, 0, 0, 1};
bool equal = true;
for (int i = 0; i< 9; ++i) {
if (!doublesEqual(expected[i], ornt1[i])) {
equal = false;
break;
}
}
if (equal) { // do smth
编辑:正如John Zwinck所建议的那样,我编辑了代码,以便在我们比较的数组只包含NAN时能够处理这种情况。我已经编辑了他的建议,使代码更具可读性。请参阅下面的评论,以澄清为何需要这样做。