阿里兄 发表于 2023-6-12 16:23:45

【转发】快速除以255的方法

经过若干次试验修改,研究出下面这个快速/255的宏,可以在 X属于的范围内误差为零:


#define div_255_fast(x)    (((x) + (((x) + 257) >> 8)) >> 8)


传统来说,人们习惯于将 /255改为 >> 8,但是这样误差挺大的,比如先乘以255再除以255,连续做十次,如果用>>8来代替除法,那么十次之后,误差为10. 另外一种常见的近似法是((x) + 255) >> 8,这种累积误差也挺厉害的。


因此>>8代替/255结果是比较粗糙的。而这个宏的开销比起>>8来说成本大12%。
经过测试65536000次计算中,使用/255的时间是325ms, 使用div_255_fast的时间是70ms,使用>>8的时间是62ms,div_255_fast的时间代价属于可以接受的范围。

————————————————
版权声明:本文为CSDN博主「skywind」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/skywind/article/details/6755360

页: [1]
查看完整版本: 【转发】快速除以255的方法