diff --git a/src/math/p_pow.c b/src/math/p_pow.c index 8ef58ed..2e46410 100644 --- a/src/math/p_pow.c +++ b/src/math/p_pow.c @@ -15,12 +15,17 @@ * @return None * */ -#include + void p_pow_f32(const float *a, const float *b, float *c, int n) { - - int i; - for (i = 0; i < n; i++) { - *(c + i) = powf(*(a + i), *(b + i)); - } + int i = 0; + float x, *c_ = c; + const float *a_ = a, *b_ = b; + while (i < n) { + /* a^b = e^(b*ln(a)) */ + p_ln_f32(a_++, &x, 1); + x *= *b_++; + p_exp_f32(&x, c_++, 1); + ++i; + } }