E:\arithmetic\Power
O(lgn) 二分法
注意:整数可能是正、负、零
#include <stdio.h>
double power(double base, int exponent);
int main(int argc, char *argv[])
{//测试用例:指数分别为整数、负数、基数、偶数、0;底数为0
double r;
r = power(2, 3);
printf("%lf\t", r);
r = power(2, -3);
printf("%lf\t", r);
r = power(2, 4);
printf("%lf\t", r);
r = power(1, 3);
printf("%lf\t", r);
r = power(2, 0);
printf("%lf\t", r);
r = power(0, 0);
printf("%lf\t", r);
return 0;
}
double power(double base, int exponent){
if(exponent == 0){
if((base<0.000001)&&(-0.000001<base)){//!!!
printf("error !0 power 0!\n");
return 0;
}
return 1;
}
double result = base;
int ex = exponent;
if(exponent < 0){
ex = (-1)*exponent;
}
int i;
for(i=0 ; i<(ex>>1) ; i++){//!!!
result *= result;
}
if(ex&0x01)//&
result *= base;
if(exponent < 0)
result = 1/result;
return result;
}