summaryrefslogtreecommitdiffstats
path: root/contrib/libf2c/libF77/pow_zz.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libf2c/libF77/pow_zz.c')
-rw-r--r--contrib/libf2c/libF77/pow_zz.c25
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);
+}
OpenPOWER on IntegriCloud