使用整数和移位来模仿浮点运算

时间:2013-01-21 09:39:43

标签: c++ bit-manipulation

我的问题是在C ++中确定效率 - 我正在开发的框架。上下文:我有两个大小相等的数组。其中一个包含来自检测到的点云的点坐标,另一个包含相应的颜色值。问题出现了颜色值索引与点坐标不完全匹配,因此需要缩放颜色数组。

为了保持系统的效率,我建议使用以下“hack”来避免浮点运算,以便让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;
     //....
}

1 个答案:

答案 0 :(得分:0)

我看到的唯一“位黑客”操作是左右移位操作。我认为你没有理由使用它们,因为任何合理的编译器都会优化代码:

int shifted_row_index = (RGB_OFFSET_X * 64);

并且

int rowindex = shifted_row_index / 64;

同样高效。