数学では、3 つの行列 'A'、'B' および 'C' が乗算され、4 番目の行列 '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
これは、行列を表すクラスを作成する場合、浮動小数点演算と除算の例は左から右に評価されるため、乗算の順序は左から右になることを示唆しています。 3 つの操作の優先順位は同じです。
OpenGL 数学ライブラリである GLM では、行列演算は括弧を必要とせずに正しい順序で計算されます。
operator*() はどのようにこのように動作するようになっていますか?
編集
ええ、そうです、それは私に指摘されたので、実際には問題ではありません。その場合、私の質問は「順序を変更することは可能ですか?」(もしかして眠い?)