|
|
计算x^n的一个快速算法,时间复杂度大约是Log2(N)。
采用二分法:比方说算x^10:
x^10 = (x^5) * (x^5)
x^5 = (x^2) * (x^2) * x
x^2 = x * x
存在的问题:没有验证是否溢出。
实际意义不是很大,纯粹是为了好玩,不知道有没有人做过了。
- double
- fastpower(double x, unsigned long n)
- {
- int i = 0;
- double ret = x;
- unsigned long m = n;
- if(!n)
- return 1;
- /* to get the effective bits (low non-zero bits)
- * i.e. 5(101)->3, 1024(10000000000)->11
- * */
- for(i = 0; m; i++)
- m >>= 1;
- /* most significant bit -> least significant bit
- * if the bits is 1: result = pri^2 * x;
- * if the bits is 0: result = pri^2
- * */
- for(i -= 1; i > 0; i--){
- ret *= ret;
- if(n & (1 << (i-1))){
- ret *= x;
- }
- }
- return ret;
- }
复制代码 |
|