/* 快速幂计算,传统计算方式如果幂次是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