如何解决获得2功率的最快方法
|| 问题很简单。我需要最快的方法来计算2的幂。我需要这个公式来计算2点之间的距离。var dist:int = Math.sqrt( (mmx - ox) * (mmx - ox) + (mmy - oy) * (mmy - oy) );
任何想法?
解决方法
如果要计算正数
a
的sqrt,请执行递归序列
x_0 = a
x_n+1 = 1/2 * (x_n + a / x_n)
x_n
和n -> infinity
一起变为sqrt(a)
。前几次迭代应该足够快。
希望有帮助!
,最快的方法通常是查找表,前提是您可以将输入值限制在足够小的范围内,例如使用(伪代码):
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)在评论中指出的那样,当真正的瓶颈是平方根时,加快乘法的影响不会很大。
并记住:测量,不要猜测!我认为自己在优化策略方面比较熟练,但是您应该对所有建议(包括我的建议)以谨慎的态度对待,就像对待酒窖中的酒鬼一样,告诉您如何过长而成功的生活。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。