0

私の質問は、私が現在開発中の C++ フレームワークで効率をスコープすることです。コンテキスト: サイズが等しい 2 つの配列があります。そのうちの 1 つは検出されたポイント クラウドからのポイント座標を含み、もう 1 つは対応するカラー値を含みます。カラー値のインデックスがポイント座標と正確に一致しないため、カラー配列をスケーリングする必要があるという問題が発生しました。

システムの効率を維持するために、次の「ハック」を使用して浮動小数点演算を回避し、カラー配列インデックスをスケーリングするために、shifted_row_index が x よりも遅く実行されるようにすることをお勧めしました。残念ながら、現時点ではアドバイザーを利用できません。この場合、このソリューションが機能する理由がわかりません。

誰かが私にそれを説明できるなら、それはあなたのいいところです。前もって感謝します!

int shifted_row_index = (RGB_OFFSET_X << 8);
for (int x = 0, xmax = g_depthMD.XRes(); x < xmax; x += raster_width)
{
     shifted_row_index += RGB_SCALE_FACTOR_X;
     int rowindex = shifted_row_index >> 8;
     rowindex = std::max(std::min(rowindex, (int)(xmax - 1)), 0);
     color_pointer[0] = pImageRow[rowindex].nRed;
     //....
}
4

1 に答える 1

0

私が目にする唯一の「ビット ハック」操作は、左右のシフト操作です。合理的なコンパイラはコードを最適化するため、それらを使用する理由はありません。

int shifted_row_index = (RGB_OFFSET_X * 64);

int rowindex = shifted_row_index / 64;

同じように効率的であること。

于 2013-01-21T09:45:48.707 に答える