1

私は時々このバグを持っています。今回はそれを明らかにする必要があります。

Mat tRo012 = trans(165, 135, 85)*rotz(-11/180*CV_PI)*rotx((-90-15)/180*CV_PI);

trans、rotz、rotx は double 型の数値を受け取る関数です。

このような操作を重ねるたびに、戻り値の Mat tRo012 が正しくなくなる原因は何だろうか。

次のようなバグが発生したことを覚えています。

double num = (-90-15)/180*CV_PI;

num の値が正しくありません。私が回避策として行ったのは、電卓を使用して明示的な結果を num にコピーすることでした。しかし、それは良い方法ではありませんね。

これについて何かコメントはありますか?

ありがとうございました!

4

1 に答える 1

2

C または C++ を使用している場合、コンパイラは定数を型として解釈intし、整数演算を行ってから、最終結果をdouble完了後にのみ変換している可能性があります。次のことを試してください。

double num = (-90.0-15.0)/180.0*CV_PI;

ちなみに、明示的な番号 (num値など) がわかっている場合は、番号を手動で入力することをお勧めします。これにより、プログラムは実行時に計算する必要がなくなります。多くのコンパイラは、最適化プロセスの一部としてこれを行いますが、必須ではありません。

于 2013-06-24T16:32:55.330 に答える