gpt4 book ai didi

c++ - C/C++ 矩阵乘法顺序

转载 作者:太空狗 更新时间:2023-10-29 23:45:34 26 4
gpt4 key购买 nike

在数学中,如果三个矩阵“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);

这给出了输出:

answer is 0.25

这对我来说表明,如果我要创建一个类来表示矩阵,那么乘法的顺序将是从左到右,这与所需的顺序相反,因为带有 float 的示例点操作和除法是从左到右计算的,因为这三个操作具有相同的优先级。

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

operator*() 是如何以这种方式运行的?

编辑

呃,是的,所以它实际上并不重要,因为有人向我指出了这一点。在这种情况下,我的问题变成“是否可以更改订单”? (也许我困了?)

最佳答案

C++ / 和二进制 * 运算符都是从左到右关联的。故事结束 - 没有办法改变它。

Matrix multiplication is associative ,不过,这不会影响您。

关于c++ - C/C++ 矩阵乘法顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com