使用整数除法减少舍入错误
Reduce round-off Error with integer division
我写了一个算法,我需要做以下事情:
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的配对数量的可能性,并将其保持为整数操作。提前感谢您的建议
int intval = 1 + ((-128+(fg*(0xFF-alpha)) + (bg*alpha))>>8);
是解决我问题的方法。谢谢你的宝贵意见。
相关文章:
- C++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 舍入 QDecDouble 值,精度最多为两个字符
- 将大 int 转换为浮点数,而不舍入 c++
- 舍入错误检测
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 在与C 双打中存储的大整数时,如何避免舍入/精确错误
- 如何防止 C++ 中的舍入错误
- C++Visual Studio学习版2012中的舍入错误
- C++建议中的舍入错误
- 使用整数除法减少舍入错误
- 如何修复此舍入错误
- 防止舍入错误
- 浮点-C++浮点舍入(错误?)