how can i make this equation faster
right now i have a bottle neck in my program I'm trying to write. i am trying to use a pinch gesture to control the scale of a UIImage. its the calculation of the scale that is causing the program to slow down and become choppy. below is the equation.
currentScale = (currentDistance / initialDistance) * scaleMod;
scaleMod is what ever the current scale was the user took their fingers off the screen. so the next time the user does a pinch the old scale is essentia开发者_如何学Pythonlly the starting point of the new scaling action.
1) Can't you calculate scaleMod / initialDistance
once while currentDistance is changing. That way you only have do that value times currentDistance, which removes a divide.
2) Make sure that this is actually the bottleneck. It most likely isn't, unless your doing something really wrong.
For any type of the three vars, this calculation can easily be done millions of times per second with little performance impact. Your problem is elsewhere.
If you fix the scaleMod and initialDistance to powers of 2 you could use shifts for faster multiplication and division.
See here for reference.
You could store scaleMod / initialDistance. When scaling is active (the user's fingers are still on the screen), multiply that value by currentDistance as needed.
Once the user has finished pinching, store the new scaleMod / initialDistance value for the next time pinching happens.
if you are doing computation with int (or other integer), see if he can do it using float precision. Floating-point divide is faster than integer (fewer bits to divide, assuming your CPU) has floating-point unit).
also, try to factor out division as multiplication by a reciprocal.
Check that InitialDistance != 0 first! :)
精彩评论