问题很简单;我需要最快的方法来计算功率2.我需要这个计算2点之间距离的公式。
var Dist:int = Math.sqrt( (mmx - ox) * (mmx - ox) + (mmy - oy) * (mmy - oy) );
有什么想法吗?
答案 0 :(得分:6)
最快的方式通常是查找表,前提是您可以将输入值限制在足够小的范围内,例如使用(伪代码):
int sqr_arr[] = {0, 1, 4, 9, 16, 25, 36, ...}
def sqr(n):
if n < 0:
return sqr(-n)
if n >= len(sqr_arr):
return n * n
return sqr_arr[n]
这允许对较低值进行高速表查找,但如果您尝试使用不在表中的参数,则会恢复为(可能)较慢的方法。
但是,正如Mitch Wheat在评论中指出的那样,当真正的瓶颈是平方根时,加速乘法不会产生太大影响。
请记住:衡量,不要猜测!我认为自己相当擅长优化策略,但你应该像对待阴茎中的酒鬼一样谨慎对待所有建议(包括我的建议) ,告诉你如何过上漫长而成功的生活。
答案 1 :(得分:0)
如果您想对正数a
计算方法,请采用递归顺序
x_0 = a
x_n+1 = 1/2 * (x_n + a / x_n)
x_n
与sqrt(a)
一起转到n -> infinity
。前几次迭代应该足够快。
希望有所帮助!