问题很简单;我需要最快的方式来计算功率2.我需要这个计算2点之间距离的公式。最快获得力量的方式2
var Dist:int = Math.sqrt( (mmx - ox) * (mmx - ox) + (mmy - oy) * (mmy - oy) );
任何想法?
问题很简单;我需要最快的方式来计算功率2.我需要这个计算2点之间距离的公式。最快获得力量的方式2
var Dist:int = Math.sqrt( (mmx - ox) * (mmx - ox) + (mmy - oy) * (mmy - oy) );
任何想法?
如果你想calc下开方为正数a
,采取递归sequense
x_0 = a
x_n+1 = 1/2 * (x_n + a/x_n)
x_n
去sqrt(a)
与n -> infinity
。前几次迭代应该足够快。
希望有帮助!
的最快方式往往是一个查找表,只要你能限制你的输入值,以一个足够小的范围内,如用(伪代码):
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在评论中所述,当真正的瓶颈是平方根时,加速倍增不会产生太大影响。
并记住:措施,不要猜测!我认为自己非常善于优化策略,但您应该像对待排水沟中的酒精一样对待所有建议(包括我的),告诉您如何过上漫长而成功的生活。
sqrt调用的时间将远远大于乘法 – 2011-05-24 02:57:08
http://www.boostworthy.com/blog/?p=197 – Marty 2011-05-24 02:59:51
平方不是通过位移来完成的。你在考虑2^n,而不是n^2。另外,为什么你不使用Math.pow? – 2011-05-24 03:01:33