为什么矩阵不等式和向量不等式的实现是这样的呢



运算符的实现似乎不正确,但我不确定
这是链接
https://github.com/NVIDIA/cuda-samples/blob/master/Common/nvMatrix.h
https://github.com/NVIDIA/cuda-samples/blob/master/Common/nvVector.h

friend bool operator != (const quaternion<T> &lhs, const quaternion<T> &rhs)
{
bool r = true;
for (int i = 0; i < 4; i++)
{
r &= lhs._array[i] == rhs._array[i];
}
return r;
}

以及向量和矩阵模板。

friend bool operator != (const vec4<T> &lhs, const vec4<T> &rhs)
{
bool r = true;
for (int i = 0; i < lhs.size(); i++)
{
r &= lhs._array[i] != rhs._array[i];
}
return r;
}
friend bool operator != (const matrix4 &lhs, const matrix4 &rhs)
{
bool r = true;
for (int i = 0; i < 16; i++)
{
r &= lhs._array[i] != rhs._array[i];
}
return r;
}

当所有元素都相等时,一个矩阵与另一个矩阵相等,如果只有一个不同的元素,则这两个矩阵是不同的。但在这里,所有的元素都必须不同,这样返回值才能为真,我无法理解这一点。

不过这里的代码不是这样工作的。您只需要其中一个值不同即可返回true


让我们看看这部分:

bool r = true;
for (int i = 0; i < 4; i++)
{
r &= lhs._array[i] != rhs._array[i];
}

让我们假设:

lhs._array = [0,1,2,3]
rhs._array = [1,1,1,3]

i0时,r &= lhs._array[i] != rhs._array[i]将变为:

r &= 0 != 1
// or
r &= true

并且由于true & true => true,所以rtrue


现在,如果i1,则r &= lhs._array[i] != rhs._array[I]将变为:

r &= 1 != 1
// or
r &= false

由于true & false => falser现在就是false


现在,如果i2,则r &= lhs._array[i] != rhs._array[I]将变为:

r &= 2 != 1
// or 
r &= true

由于false & true => falser仍然是false


现在,如果i3,那么r &= lhs._array[i] != rhs._array[I]将变为:

r &= 3 != 3
// or 
r &= false

由于false & false => falser仍然是false


总之,当lhs._array[i] != rhs._array[i]第一次成为false时,r将变成false,并且它将在循环的其余部分保持false

相关内容

  • 没有找到相关文章

最新更新