Commit | Line | Data |
---|---|---|
0c9e74ab TL |
1 | #include "complex" |
2 | ||
3 | z_sqrt(r, z) | |
4 | dcomplex *r, *z; | |
5 | { | |
6 | double mag, sqrt(), cabs(); | |
7 | ||
8 | if( (mag = cabs(z->dreal, z->dimag)) == 0.) | |
9 | r->dreal = r->dimag = 0.; | |
10 | else if(z->dreal > 0) | |
11 | { | |
12 | r->dreal = sqrt(0.5 * (mag + z->dreal) ); | |
13 | r->dimag = z->dimag / r->dreal / 2; | |
14 | } | |
15 | else | |
16 | { | |
17 | r->dimag = sqrt(0.5 * (mag - z->dreal) ); | |
18 | if(z->dimag < 0) | |
19 | z->dimag = - z->dimag; | |
20 | r->dreal = z->dimag / r->dimag / 2; | |
21 | } | |
22 | } |