我有以下公式
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。是否可以跳过昂贵的浮点除法,而仍然以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;
因为乘法通常比除法快得多。