最快获得2点力量的方法

时间:2011-05-24 02:54:28

标签: flash actionscript-3 performance math

问题很简单;我需要最快的方法来计算功率2.我需要这个计算2点之间距离的公式。

var Dist:int = Math.sqrt(  (mmx - ox) * (mmx - ox)  +  (mmy - oy) * (mmy - oy)  );

有什么想法吗?

2 个答案:

答案 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_nsqrt(a)一起转到n -> infinity。前几次迭代应该足够快。

希望有所帮助!