我在Arduino上编写了一些代码,需要快速运行并对整数的百分比进行粗略近似. 例如,给定一个数字我想找到它的90%,或70%或30%等.显而易见的方法是乘以浮点,例如. x * 0.9;或x * 0.3;但因为
例如,给定一个数字我想找到它的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
这些部门(现在是二人权力)可以轮班完成.
当然,可能需要一些预先计算来生成这些分数.