c++ - 优化浮点除法和转换操​​作

标签 c++ c algorithm floating-point

我有以下公式

float mean = (r+b+g)/3/255.0f;

我想加快速度。有以下前提条件

0<= mean <= 1  and 0 <= r,g,b <= 255 and r, g, b are unsigned chars

所以如果我尝试使用这样一个事实 >> 8 就像除以 256 并且我使用类似

float mean = (float)(((r+b+g)/3) >> 8);

这将始终返回 0。有没有一种方法可以跳过代价高昂的 float 除法并最终得到介于 0 和 1 之间的平均值?

最佳答案

将除法预先转换为可乘常数:

a / 3 / 255

相同
a * (1 / (3 * 255))

所以预先计算:

const float AVERAGE_SCALE_FACTOR = 1.f / (3.f * 255.f)

然后就去做

float mean = (r + g + b) * AVERAGE_SCALE_FACTOR;

因为乘法通常比除法快得多。

关于c++ - 优化浮点除法和转换操​​作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1366437/

相关文章:

C++ Vector 无法 push_back

c - 如何使用 C 比较十六进制值?

c - 在C中合并两个文件

寻找有向图根的算法

c++ - 如何忽略字符数组中的某些字母和空格

c++ - MSBuild 是否需要安装 Visual Studio?

c++ - 在 C++ 中将数组设置为已初始化的传入数组

C:存储调用main时传递的参数

algorithm - 您建议实际使用哪种算法为每个网站生成唯一密码?

c++ - 找到 2 个等和子序列,具有最大和?