x265中指数函数计算代码如下:
//* Not a general-purpose function; mulies input by -1/6 to convert
* qp to qscale. */
int x265_exp2fix8(double x)
{
int i = (int)(x * (-64.f / 6.f) + 512.5f);
if (i < 0) return 0;
if (i > 1023) return 0xffff;
return (x265_exp2_lut[i & 63] + 256) << (i >> 6) >> 8;
}
转换为数学公式:
最后计算cost值时要除2的8次方,最终化简为:
发现分式有两项组成 lut(i%64)为小数部分求指数后剩下的小数部位扩大256倍后结果,2^8次方为小数部分求指数后剩下的整数部位扩大256倍。该函数的技巧在于计算指数避免了浮点运算,以及查表避免必须的浮点运算。