我有一个double[9]
,想检查它是否包含值(1,0,0,0,1,0,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++。
严格
比较双精度值不是一个好主意。我建议您创建一个常量数组进行比较,然后使用循环并使用公差(例如 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的情况。我稍微编辑了他的建议,以使代码更具可读性。请参阅他在下面的评论,以澄清为什么需要这样做。