Initial revision
[official-gcc.git] / gcc / f / runtime / libF77 / c_sqrt.c
blob775977a87f7b336019c236ab53fceff83e159bbd
1 #include "f2c.h"
3 #ifdef KR_headers
4 extern double sqrt(), f__cabs();
6 VOID c_sqrt(resx, z) complex *resx, *z;
7 #else
8 #undef abs
9 #include <math.h>
10 extern double f__cabs(double, double);
12 void c_sqrt(complex *resx, complex *z)
13 #endif
15 double mag, t;
16 complex res;
18 if( (mag = f__cabs(z->r, z->i)) == 0.)
19 res.r = res.i = 0.;
20 else if(z->r > 0)
22 res.r = t = sqrt(0.5 * (mag + z->r) );
23 t = z->i / t;
24 res.i = 0.5 * t;
26 else
28 t = sqrt(0.5 * (mag - z->r) );
29 if(z->i < 0)
30 t = -t;
31 res.i = t;
32 t = z->i / t;
33 res.r = 0.5 * t;
36 resx->r = res.r;
37 resx->i = res.i;