我正在为Arduino编写一些代码,这些代码需要快速运行并对整数百分比进行粗略近似。
例如,给定一个数字我想要找到它的90%,或70%或30%等。显而易见的方法是乘以一个浮点,例如。 x * 0.9;或x * 0.3;但因为我需要速度,我想避免浮点计算。如果我只是除以2的幂,我会做一个按位移位,但是有类似的技术用于使用整数逼近90%,80%等等吗?
答案 0 :(得分:4)
您可以使用具有二分之二分母的分数来近似这些百分比。
以下是2^16
的简单示例:
90% = 90 / 100 ~ 58982 / 65536
70% = 70 / 100 ~ 45875 / 65536
30% = 30 / 100 ~ 19661 / 65536
x% = x / 100 ~ x * 655 / 65536
分歧(现在是两个权力)可以轮班完成。
当然,生成这些分数可能需要一些预先计算。
答案 1 :(得分:2)
比特移位How can I multiply and divide using only bit shifting and adding?
您可以使用位移来乘以和除以arx示例x =(x * 9)/ 10
至于一个代码示例,如果你遇到困难,我可以尝试烧掉一些脑细胞来解决它。 请问:)