]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - contrib/libf2c/libF77/pow_zz.c
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / contrib / libf2c / libF77 / pow_zz.c
1 #include "f2c.h"
2
3 #undef abs
4 #include <math.h>
5 extern double f__cabs (double, double);
6 void
7 pow_zz (doublecomplex * r, doublecomplex * a, doublecomplex * b)
8 {
9   double logr, logi, x, y;
10
11   if (a->r == 0.0 && a->i == 0.0)
12     {
13         /* Algorithm below doesn't cope.  */
14         r->r = r->i = 0.0;
15         return;
16     }
17   logr = log (f__cabs (a->r, a->i));
18   logi = atan2 (a->i, a->r);
19
20   x = exp (logr * b->r - logi * b->i);
21   y = logr * b->i + logi * b->r;
22
23   r->r = x * cos (y);
24   r->i = x * sin (y);
25 }