快速替代浮点乘法来计算百分比

时间:2012-01-14 02:06:49

标签: performance arduino heuristics integer-division integer-arithmetic

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

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

2 个答案:

答案 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

至于一个代码示例,如果你遇到困难,我可以尝试烧掉一些脑细胞来解决它。 请问:)

相关问题