我正在Arduino上编写一些代码,这些代码需要快速运行,并对整数百分比进行粗略估算。

例如,给定一个数字,我想找到其中的90%,或者70%或30%,等等。显而易见的方法是将其乘以一个浮点数。 x * 0.9;或x * 0.3;但是因为我需要速度,所以我想避免进行浮点计算。如果我只是除以2的幂,我会做一个按位移位,但是是否有类似的技术可以使用整数近似90%,80%等?

最佳答案

您可以使用分数为2的幂的分数来近似表示这些百分比。

这是2^16的简单示例:

90% = 90 / 100 ~ 58982 / 65536
70% = 70 / 100 ~ 45875 / 65536
30% = 30 / 100 ~ 19661 / 65536

 x% =  x / 100 ~ x * 655 / 65536


除法(现在是2的幂)可以通过移位来完成。

当然,可能需要一些预计算才能生成这些分数。

08-25 14:26