int*_*tar 5 performance heuristics arduino integer-division integer-arithmetic
我正在 Arduino 上编写一些代码,该代码需要快速运行并对整数百分比进行粗略近似。
例如,给定一个数字,我想找到它的 90%、70% 或 30% 等。最明显的方法是乘以浮点,例如。x * 0.9;或 x * 0.3;但因为我需要速度,所以我想避免浮点计算。如果我只是除以 2 的幂,我会进行按位移位,但是是否有类似的技术可以使用整数来近似 90%、80% 等?
您可以使用具有二次方分母的分数来近似这些百分比。
这是一个简单的例子2^16
:
90% = 90 / 100 ~ 58982 / 65536
70% = 70 / 100 ~ 45875 / 65536
30% = 30 / 100 ~ 19661 / 65536
x% = x / 100 ~ x * 655 / 65536
Run Code Online (Sandbox Code Playgroud)
除法(现在是二的幂)可以通过轮班来完成。
当然,可能需要一些预先计算才能生成这些分数。
归档时间: |
|
查看次数: |
4340 次 |
最近记录: |