diff options
Diffstat (limited to 'lib/libm/cpowl.c')
| -rw-r--r-- | lib/libm/cpowl.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/libm/cpowl.c b/lib/libm/cpowl.c new file mode 100644 index 00000000..b7471f0a --- /dev/null +++ b/lib/libm/cpowl.c @@ -0,0 +1,20 @@ +#include "__complex.h" + +long double complex cpowl(long double complex a, long double complex z) +{ + long double x, y, r, theta, absa, arga; + x = creall(z); + y = cimagl(z); + absa = cabsl(a); + if (absa == 0.0L) { + return (0.0L + 0.0L * (long double complex)I); + } + arga = cargl(a); + r = powl(absa, x); + theta = x * arga; + if (y != 0.0L) { + r = r * expl(-y * arga); + theta = theta + y * logl(absa); + } + return r * cosl(theta) + (r * sinl(theta)) * (long double complex)I; +} |
