ahjesus js 快速求幂

/*







    快速幂计算,传统计算方式如果幂次是100就要循环100遍求值







    快速幂计算只需要循环7次即可







    求x的y次方 x^y可以做如下分解







    把y转换为2进制,设第n位的值为i,计算第n位的权为x^(2^(n-1)*i)







    例如2^12







    12的二进制是1100







    12=2^3*1+2^2*1+2^1*0+2^0*0







    因此2^12=2^(2^3+2^2)







    分解得到2^12=2^(2^3)*2^(2^2)







    */







    function myPow(dx, dy) {







        var r = 1;







        while (dy != 0) {







            var b = dy & 1; //取最末尾的一位数,也可以判断奇偶数,奇数:1,偶数:0







            if (b) {//如果最末尾的数是1,储存有效值







                r *= dx;







            }







            dx *= dx; //这里即完成了x^(2^(n-1)*i)的计算







            dy >>= 1; //右位移去掉末尾1位,也可以看成是除以2取整数







        }







        return r;







    }

 

      更详尽的可以参考

http://www.cnblogs.com/yan-boy/archive/2012/11/29/2795294.html

你可能感兴趣的:(js)