<<代码优化-之-优化除法>> tag:代码优化,除法,牛顿迭代,减法代替除法,除法优化 说明:文章中的很多数据可能在不同的CPU或不同的系统环境下有不同的结果,数据仅供参考 本文将给出一些除法的优化方法或替代算法 (警告:某些替代算法并不能保证完全等价!) 1.尽量少用除法 (少用求余) 2.用减法代替除法 一个用减法和移位完成的除法 (如果你没有除法指令可用:) for (int i=0;i<32;++i) 对于有符号的整数; 4.合并除法 (替代方法不等价,很多编译器都不会帮你做这种优化) 比如: double x=a/b+c/b; 比如: double x=a/b; 6.用查表的方法代替除法 比如 uint8 x; 7.用乘法代替除法 对于整数,可以使用与定点数相似的方法来处理倒数 对于这种方法,某些除法是有与之完全等价的优化方法的: 无符号数除以5: uint32 x,y; x=y/5; (y<(1<<31)) 无符号数除以7: uint32 x,y; x=y/7; 对于这种完全等价的替代,还有其他替代公式不再讨论,对于有符号除法的替代算法没有讨论,很多数都有完全等价的替代算法,那些魔法数也是有规律可循的;有“进取心”的编译器应该帮助用户处理掉这个优化(vc6中就已经见到! 偷懒的办法是直接看vc6生成的汇编码:); 8.对于已知被除数是除数的整数倍数的除法,能够得到替代算法;或改进的算法; 附录: 用牛顿迭代法来实现开方运算 |
代码优化之优化除法
最新推荐文章于 2023-05-18 20:38:33 发布
[转帖]代码优化-之-优化除法