```
double myPow(double x, int m) {
double ans = 1.0;
double p = x;
long n = (m >= 0) ? m : -m;
while(n > 0) {
if (n & 1) {
ans *= p;
}
n >>= 1;
p *= p;
}
return (m >=0) ? ans : 1.0/ans;
}
```