diff --git a/inc/math.h b/inc/math.h index 780a6b7..f6b7819 100644 --- a/inc/math.h +++ b/inc/math.h @@ -224,7 +224,9 @@ float cotan(float x); -float exp(float x); +float expf(float x); +double exp(double x); + float log(float x); float powf(float b, float x); diff --git a/src/math.c b/src/math.c index 5e97611..17277d8 100644 --- a/src/math.c +++ b/src/math.c @@ -162,22 +162,10 @@ } -float exp(float x) +float expf(float x) { - const float int_exps[] = - { - M_E, - M_E * M_E, - M_E * M_E * M_E * M_E, - M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E, - M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E, - M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E *M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E, - M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E *M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E *M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E * M_E - }; - - bool neg = false; - + if (x < 0) { neg = 1; @@ -191,15 +179,16 @@ if (x_int > 127) { - rv = INFINITY; + return INFINITY; } else { rv = 1; + float e = M_E; - for(uint32_t i = 0; (i < 7) && x_int; i++, x_int >>= 1) + for(uint32_t i = 0; (i < 7) && x_int; i++, x_int >>= 1, e *= e) if (x_int & 0x01) - rv *= int_exps[i]; + rv *= e; } if (x > 0) @@ -222,6 +211,16 @@ } +double exp(double x) +{ + + + + + +} + + float log(float x) {