public class Test14 {
boolean isInvalid = false;
public double myPow(double x, int n) {
isInvalid = false;
double result;
if (n > 0){
result = powerCore(x,n);
} else if (n < 0) {
if (x == 0) {
isInvalid = true;
return 0;
}
result = 1 / powerCore(x, -n);
} else {
return 1;
}
return result;
}
private double powerCore(double x, int n) {
if (n == 1){
return x;
}
if (n == 0){
return 1;
}
double result = powerCore(x,n >> 1);
result *= result;
if ((n & 1) == 1){
result *= x;
}
return result;
}
public double myPow2(double x, int n) {
if(x == 0) return 0;
long b = n;
double res = 1.0;
if(b < 0) {
x = 1 / x;
b = -b;
}
while(b > 0) {
if((b & 1) == 1) res *= x;
x *= x;
b >>= 1;
}
return res;
}
public static void main(String[] args) {
System.out.println(new Test14().myPow2(5, -4));
}
}