level 11
zszen
楼主
简单的pow幂都很容易写, 但是复杂的就需要这个, 小数, 负数都支持, K代表精度, 根号2进行K4精度可以得到1.4142已经可以了 K3的话是1.415也还行
float my_pow(float base, float ex);
float nth_root(float A, int n) {
const int K = 4;
float x[K];
x[0] = 1;
for (int k = 0; k < K - 1; k++)
x[k + 1] = (1.0 / n) * ((n - 1) * x[k] + A / my_pow(x[k], n - 1));
return x[K-1];
}
float my_pow(float base, float ex){
if (base == 0)
return 0;
// power of 0
if (ex == 0){
return 1;
// negative exponenet
}else if( ex < 0){
return 1 / my_pow(base, -ex);
// fractional exponent
}else if (ex > 0 && ex < 1){
return nth_root(base, 1/ex);
}else if ((int)ex % 2 == 0){
float half_pow = my_pow(base, ex/2);
return half_pow * half_pow;
//integer exponenet
}else{
return base * my_pow(base, ex - 1);
}
}
2017年01月05日 04点01分
1
float my_pow(float base, float ex);
float nth_root(float A, int n) {
const int K = 4;
float x[K];
x[0] = 1;
for (int k = 0; k < K - 1; k++)
x[k + 1] = (1.0 / n) * ((n - 1) * x[k] + A / my_pow(x[k], n - 1));
return x[K-1];
}
float my_pow(float base, float ex){
if (base == 0)
return 0;
// power of 0
if (ex == 0){
return 1;
// negative exponenet
}else if( ex < 0){
return 1 / my_pow(base, -ex);
// fractional exponent
}else if (ex > 0 && ex < 1){
return nth_root(base, 1/ex);
}else if ((int)ex % 2 == 0){
float half_pow = my_pow(base, ex/2);
return half_pow * half_pow;
//integer exponenet
}else{
return base * my_pow(base, ex - 1);
}
}