В математике, если перемножить три матрицы «A», «B» и «C», так что четвертая матрица «D = A * B * C», то порядок должен быть вычислен справа налево я>. Используя круглые скобки для пояснения, предыдущее утверждение точно эквивалентно следующему; 'D = (А * (В * С))'.
Вы можете увидеть, как это применимо к выражению '{ 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
Это наводит меня на мысль, что если бы я создал класс для представления матрицы, то порядок умножения был бы слева направо, обратный желаемому, поскольку пример с операциями с плавающей запятой и деление выполняется слева направо, так как все три операции имеют одинаковый приоритет.
В математической библиотеке OpenGL, GLM, матричные операции вычисляются в правильном порядке, без скобок.
Как заставить operator*() вести себя таким образом?
Редактировать
Эээ, да, так что на самом деле это не имеет значения, как мне было указано. В таком случае у меня возникает вопрос, можно ли изменить порядок? (Может, я сонный?)