package offer;
/**
* offer interview 11
*/
public class Test11 {
public static double power(double base,int exponent){
if (0 == base && 0 == exponent){
throw new RuntimeException("Invalid input");
}
if (0 == exponent){
return 1;
}
long exp = exponent;
if (exponent < 0){
exp = -exp;
}
double result = powerWithUnsignedExponent(base,exp);
if (exponent < 0){
result = 1 / result;
}
return result;
}
public static double powerWithUnsignedExponent(double base , long exponent){
if (0 == exponent){
return 1;
}
if (exponent == 1){
return base;
}
double result = powerWithUnsignedExponent(base,exponent>>2);
result = result * result;
if (result % 2 != 0){
result = result * base;
}
return result;
}
public static void main(String[] args){
System.out.println(0.0000000000000000000000001111 == 0);
System.out.println(0.0000000000000000000000000000 == 0);
System.out.println(power(2,-4));
System.out.println(power(2,4));
System.out.println(power(2,1));
System.out.println(power(2,0));
System.out.println(power(0.0000000000000000000000000001,-1));
System.out.println(power(0.0000000000000000000000000001,1));
System.out.println(power(0.0000000000000000000000000001,0));
System.out.println(power(0.0000000000000000000000000000,0));
}
}