4

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

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

4

2 回答 2

4

您可以使用具有二次幂分母的分数来近似这些百分比。

这是一个简单的例子2^16

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

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

除法(现在是二的幂)可以通过轮班来完成。

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

于 2012-01-14T02:21:30.620 回答
2

位移 如何仅使用位移和加法进行乘法和除法?

您可以使用位移来乘除 arx 示例 x = (x*9)/10

至于代码示例,如果您遇到困难,我可以尝试燃烧一些脑细胞来解决问题。只是问:)

于 2012-01-15T11:56:30.940 回答