快速替代浮点数乘法计算百分比的方法

5
我正在Arduino上编写一些需要快速运行并近似计算整数百分比的代码。
例如,给定一个数字,我希望找到它的90%、70%或30%等。显而易见的方法是乘以浮点数,例如 x * 0.9; 或 x * 0.3;但由于我需要速度,我想避免使用浮点数计算。如果只是除以2的幂,我会进行位移操作,但是否有类似的技术可以使用整数来近似计算90%、80%等?
2个回答

5

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

以下是一个简单的示例,使用2^16

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

 x% =  x / 100 ~ x * 655 / 65536
这些分割(现在是二的幂)可以通过移位操作完成。
当然,可能需要进行一些预计算来生成这些分数。

1
啊...看起来很有前途。那么y的x%是(y * x * 655 / 65536)吗? - interstar
是的,没错。2^16 应该足够准确了。如果需要更高的精度,您可以使用比 2^16 更大的数值。 - Mysticial
2
如果你想进行更好的四舍五入,也可以尝试 (y * x * 655 + 32768) / 65536 - Mysticial

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接