C / C++ Matrix Multiplication Order
在数学中,如果将三个矩阵\\'A \\',\\'B \\'和\\'C \\'相乘,使得第四个矩阵\\'D = A * B * C \\',则阶数必须从右到左计算。用括号澄清,前面的语句与下面的语句完全相同; \\'D =(A *(B * C))\\'。
您可以看到它如何应用于表达式\\'{M = A * B * C * D} == {M =(A *(B *(C *(D))))} \\',其中是另一个例子。
在C,C中,我使用除法进行了测试,以检查在C和C中执行操作的顺序。
也许有一种更好的方式来编译我的汇编代码,但是:
1 2 3 4 5 6 | float a = 1.0; float b = 2.0; float c = 2.0; float ans = a / b / c; printf("answer is %f\ ", ans); |
这给出了输出:
1 | answer is 0.25 |
这向我暗示,如果我要创建一个代表矩阵的类,则乘法顺序将从左到右,与期望的顺序相反,因为带有浮点运算和除法的示例是左计算的向右,因为这三个操作具有相同的优先级。
在OpenGL数学库GLM中,矩阵运算以正确的顺序计算,而无需括号。
如何使operator *()表现为这种方式?
编辑
是的,是的,所以实际上这并不重要,因为已经向我指出了。在这种情况下,我的问题变为"可以更改订单"吗? (也许我很困吗?)
C
但是,矩阵乘法是关联的,因此不会影响您。
原因很简单:矩阵乘法是关联的;标量除法不是。
因此C调用运算符的顺序与矩阵乘法无关。