繁体   English   中英

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

[英]Using integer and shifting to imitate floating point operations

我的问题是确定我目前正在开发的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;
     //....
}

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

int shifted_row_index = (RGB_OFFSET_X * 64);

int rowindex = shifted_row_index / 64;

一样高效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM