里飞网

 找回密码
 立即注册
查看: 3542|回复: 0
打印 上一主题 下一主题

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

[复制链接]

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
跳转到指定楼层
楼主
发表于 2023-6-12 16:23:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过若干次试验修改,研究出下面这个快速/255的宏,可以在 X属于[0,65536]的范围内误差为零:


#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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|里飞网  

GMT+8, 2024-11-27 10:14 , Processed in 0.068344 second(s), 4 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表