提问人:feesh 提问时间:1/25/2022 更新时间:1/25/2022 访问量:89
为什么要以这种方式实现矩阵和向量的不等式?[关闭]
Why the implementation of inequality of matrix and vectors in such way? [closed]
问:
运算符的实现似乎不对,但我不确定。
这是 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;
}
答:
当一个矩阵的所有元素都相等时,矩阵等于另一个矩阵,如果只有一个不同的元素,则 2 个矩阵是不同的。但是在这里,所有元素都必须不同,因此返回值可以是真的,我无法理解这一点。
但这不是代码在这里的工作方式。您只需要其中一个值不同即可返回。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]
什么时候是 ,会变成:i
0
r &= lhs._array[i] != rhs._array[i]
r &= 0 != 1
// or
r &= true
由于 ,是 .true & true => true
r
true
现在,如果是,那么将变为:i
1
r &= lhs._array[i] != rhs._array[I]
r &= 1 != 1
// or
r &= false
既然,就是现在。true & false => false
r
false
现在,如果是,那么将变为:i
2
r &= lhs._array[i] != rhs._array[I]
r &= 2 != 1
// or
r &= true
由于 ,仍然是 .false & true => false
r
false
现在,如果是,那么将变为:i
3
r &= lhs._array[i] != rhs._array[I]
r &= 3 != 3
// or
r &= false
由于 ,仍然是 .false & false => false
r
false
总之,将成为第一次是 ,并且它将保留在循环的其余部分。r
false
lhs._array[i] != rhs._array[i]
false
false
评论
quaternion
vec4
matrix4
1 &= 1 == 1
1 &= 0 == 0
0 &= 1 == 0