我有一个cpp项目,虽然能运行但性能很差。
int currentPos = getPos();
int length = getLength();
if (1.0 * currentPos / length < 0.5)
{
// do something
}
else
{
// do something
}
问题是:
1.0 * currentPos / length
花费的时间太长了。谷歌告诉我,除法总是需要很多时间,我们可以借助右移来避免它。
例如,
a=a/4
可以替换为b=b>>2
。我可以理解这个例子,但我不知道如何使用右移来优化我的代码。
如果不可能,是否有其他方法可以避免除法?
编辑: 1)
if
中的条件并不总是0.5
,它可以是任何介于(0,1)之间的有理数。
2)上面的代码每秒执行10 * 56 * 181 * 56 * 181
次。
currentPos << 1 < length
或者currentPos < length >> 1
。 - Eli Sadoffcurrent / length < 0.5
等同于2 * current < length
。如果方程式是current / length < 0.7
,那么它将变成10 * current < 7 * length
。没有除法,只有乘法。任何乘以2的操作都可以替换为<< 1
。 - alvits