diff options
Diffstat (limited to 'contrib/libf2c/libF77/pow_zz.c')
-rw-r--r-- | contrib/libf2c/libF77/pow_zz.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/contrib/libf2c/libF77/pow_zz.c b/contrib/libf2c/libF77/pow_zz.c new file mode 100644 index 0000000..d5cfbf3 --- /dev/null +++ b/contrib/libf2c/libF77/pow_zz.c @@ -0,0 +1,25 @@ +#include "f2c.h" + +#undef abs +#include <math.h> +extern double f__cabs (double, double); +void +pow_zz (doublecomplex * r, doublecomplex * a, doublecomplex * b) +{ + double logr, logi, x, y; + + if (a->r == 0.0 && a->i == 0.0) + { + /* Algorithm below doesn't cope. */ + r->r = r->i = 0.0; + return; + } + logr = log (f__cabs (a->r, a->i)); + logi = atan2 (a->i, a->r); + + x = exp (logr * b->r - logi * b->i); + y = logr * b->i + logi * b->r; + + r->r = x * cos (y); + r->i = x * sin (y); +} |