知识卡片
常数形状影响成本
内容
当除数或周期能设计成 2 的幂时,取模和除法可变成按位与或移位。发散:算法参数不是纯数学选择,也会决定编译后能否避开[[一行除法可能很慢]]。
参考来源
- 位置:《嵌入式系统设计与实践》第9章《数学运算》"9.1 区别快、慢运算"一节(源文件:_epub-src/OEBPS/text00126.html)
- 结论依据:原文以循环取模为例,说明"如果执行间隔可以改为2的幂,那么取模可以被替换成简单(单条指令)的逐位逻辑操作",并给出`i & 0x07`替代`i % 10`的例子,明确"当需要移动的位数是个常量时,移位运算只需要一个处理器周期……如果能让这些常量是2的幂以便用移位运算替代算术运算,那么这将是用来做除法和乘法运算比较廉价的方法"。
- 原始内容:如果执行间隔可以改为2的幂,那么取模可以被替换成简单(单条指令)的逐位逻辑操作……总的说来,当需要移动的位数是个常量时,移位运算只需要一个处理器周期。因此,如果能让这些常量是2的幂以便用移位运算替代算术运算,那么这将是用来做除法和乘法运算比较廉价的方法。