C/C++矩阵乘法顺序

use*_*501 2 c++ opengl math glm-math

在数学中,如果三个矩阵,'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++中完成操作的顺序.

但是,编译汇编代码可能有更好的方法:

float a = 1.0;
float b = 2.0;
float c = 2.0;
float ans = a / b / c;
printf("answer is %f\n", ans);
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

answer is 0.25
Run Code Online (Sandbox Code Playgroud)

这告诉我,如果我要创建一个表示矩阵的类,那么乘法的顺序将从左到右,与所需的相反,因为具有浮点运算和除法的示例从左到右进行评估,因为这三个操作具有相同的优先权.

在OpenGL数学库GLM中,矩阵运算以正确的顺序计算,不需要括号.

operator*()如何以这种方式表现?

编辑

呃,是的,所以它实际上并不重要,因为它已被指出给我.在这种情况下,我的问题变成"是否可以改变订单"?(也许我困了?)

Car*_*rum 6

C++ /和二元*运算符都是从左到右的关联.故事结束 - 没有办法改变这一点.

但矩阵乘法关联的,所以不应该影响你.