手写代码实现浮点数a的b次方,思路,将幂次部分的采用类似‘快速幂取模’的方法,把整数表示成2的幂次的和;小数部分也采取用0.5求出0.25的策略
double my_pow(const double a, const double b)
{
double res = 1;
int p = static_cast<int>(b);
double q = b – p;
double base = a;
while (p) {
if (p & 1) {
res *= base;
}
p >>= 1;
base *= base;
}
base = sqrt(a);
double t = 0.5;
while (q > eps) {
if (q > t) {
res *= base;
q -= t;
}
t /= 2;
base = sqrt(base);
}
return res;
}
近期评论