使用整数除法减少舍入误差

时间:2014-06-28 16:12:02

标签: c++

我写了一个算法,我需要做以下几点:

double newval=(fg*(double)(0xFF-alpha)) / 256.0 + (bg*(double)alpha)/256.0;

alpha,fg和bg是0-255之间的值。由于性能原因,我想将其实现为具有整数值的解决方案。所以它看起来像这样:

int offset = 1;
if (alpha == 0 || alpha == 256 || fg == 0 || bg == 0)
offset = 0;
int intval = offset + (((fg*(0xFF-alpha)) + (bg*alpha))>>8);

我使用alpha,fg和bg的每种可能组合进行测试,得到8,388,607对,舍入误差为1.

我正在寻找减少错误值为1的对的可能性并将其保持为整数运算。提前感谢您的建议。

1 个答案:

答案 0 :(得分:0)

int intval = 1 + ((-128+(fg*(0xFF-alpha)) + (bg*alpha))>>8);

解决我的问题。感谢您提供有用的评论。