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

Math 寻找使用整数数学计算百分比的好替代品,math,integer,precision,Math,Integer,Precision,我是一名嵌入式应用程序编程爱好者。应用程序需要速度。我想确定某个变量(称之为“X”)是否已通过另一个变量(称之为“Z”)的某个百分比(称之为“Y”) 十、 Y和Z都可以在运行时更改。因为我需要速度,所以我想用整数数学来做这件事,而不是浮点运算,因为浮点运算会导致速度损失 做这件事有什么诀窍吗?我是一个自学成才的程序员,所以请原谅,如果这是一个众所周知的问题和一个众所周知的解决方案 谢谢大家! 所以你想测试的是1*X>Z*Y没有什么能阻止你这么做,只需定义1(因此100%)为10^deplaces

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

十、 Y和Z都可以在运行时更改。因为我需要速度,所以我想用整数数学来做这件事,而不是浮点运算,因为浮点运算会导致速度损失

做这件事有什么诀窍吗?我是一个自学成才的程序员,所以请原谅,如果这是一个众所周知的问题和一个众所周知的解决方案


谢谢大家!

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

如果您需要将计算正确到4d.p.以内,如果
X=10
那么
X\u固定精度=100000
如果Y为30%(0.3),那么
Y\u固定精度=3000
如果
Z=10000
那么
Z\u固定精度=100000000
这个技巧称为固定精度算术

如果您想要更好的性能,请使用2的幂而不是10的幂(很难精确转换为小数点后的位数,但应该更快一些)

e、 你的代码可能看起来像

if (ONE_FIXED_PRECISION * X_fixed_precision > Z_fixed_precision * Y_fixed_precision)
   // Do something
其中
FOO\u fixed\u precision=FOO*ONE\u fixed\u precision


不过,要小心确保不会出现整数溢出-
X*ONE_FIXED\u POINT*ONE_FIXED\u POINT
的最大值必须小于可以存储在单词中的最大值(如果使用较长的整数类型,则为双单词)

请原谅新手的问题,抱歉,但为什么(例如)100*x/y>z而不是100*x>z*y?因为这是我在头脑中进行数学运算的方式…(我已经有一段时间没有使用这种技术了)我会编辑,纯乘法方式更准确宾果!谢谢你帮助了一个真正的新手。如果你想知道你帮我做了什么,我正在尝试制作一个螺旋桨时钟,类似于你在youtube上看到的硬盘时钟。感谢你的帮助!难道在某些语言中你也可以使用像100这样的括号吗*(x/y)>z以防止溢出?也许甚至不需要使用括号。如果先进行除法,则会丢失精度-如果x为3.31,y为33%,z为10,并且使用100作为固定精度乘数,则测试应返回真值,但使用整数除法,
100*(331/33)=1000
严格来说不大于
10*100=1000
331*100>1000*33