最快获得2点力量的方法

Kat*_*ore 1 math flash performance actionscript-3

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

var Dist:int = Math.sqrt(  (mmx - ox) * (mmx - ox)  +  (mmy - oy) * (mmy - oy)  );
Run Code Online (Sandbox Code Playgroud)

任何的想法?

pax*_*blo 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]
Run Code Online (Sandbox Code Playgroud)

这允许对较低值进行高速表查找,但如果尝试使用不在表中的参数,则还原为(可能)较慢的方法.

但是,正如Mitch Wheat在评论中指出的那样,当真正的瓶颈是平方根时,加速乘法将不会产生太大影响.

并记住:措施,不要猜!我认为自己相当擅长优化策略,但你应该像对待阴沟中的酒鬼一样谨慎对待所有建议(包括我的建议),告诉你如何过上漫长而成功的生活.

  • @paxdiablo,as3中的表查找是慢的,最快的方式是乘法,你正在进行2分支测试(n <0)和(n> len(...)),这也减慢了你的功能. (2认同)