寻找使用整数数学计算百分比的良好替代品

时间:2010-11-17 05:22:01

标签: math integer precision

我是嵌入式应用程序的业余爱好者编程。该应用程序需要速度。我想确定某个变量(称为“X”)是否已经超过另一个变量的某个百分比(称之为“Y”)(称之为“Z”)。

X,Y和Z都可以在运行时更改。由于我需要速度,我想使用整数数学而不是浮点数,这会导致速度惩罚。

这样做有什么技巧吗?我是一名训练有素的程序员,所以如果这是众所周知的解决方案中众所周知的问题,请原谅。

谢谢!

1 个答案:

答案 0 :(得分:2)

所以你想要的是测试1*X > Z*Y没有什么可以阻止你这样做,只需将{(因此100%)定义为10^decPlaces decPlaces>=2(否则你没有足够的精度来做百分比int s

如果您需要在4 d.p.内进行正确的计算。如果X = 10然后是X_fixed_precision = 100000,如果Y是30%(0.3),那么Y_fixed_precision=3000如果Z=10000那么z_fixed_precision=100000000这个技巧称为固定精度算术... < / p>

如果你想要更好的性能,可以使用2而不是10的功率(更难以准确地转换为多少小数位数,但这应该更快一些)

e.g。你的代码可能看起来像

if (ONE_FIXED_PRECISION * X_fixed_precision > Z_fixed_precision * Y_fixed_precision)
   // Do something

其中FOO_fixed_precision = FOO * ONE_FIXED_PRECISION

小心确保你不会在那里得到整数溢出 - X * ONE_FIXED_POINT * ONE_FIXED_POINT的最大值必须小于你可以存储在单词中的最大值(如果你使用更长时间,则为双字;整数类型)