home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / f2c / f77lib / z_sqrt.c < prev   
C/C++ Source or Header  |  2000-06-22  |  492b  |  30 lines

  1. #include "f2c.h"
  2.  
  3. #ifdef KR_headers
  4. double sqrt(), f__cabs();
  5. VOID z_sqrt(r, z) doublecomplex *r, *z;
  6. #else
  7. #undef abs
  8. #include "math.h"
  9. extern double f__cabs(double, double);
  10. void z_sqrt(doublecomplex *r, doublecomplex *z)
  11. #endif
  12. {
  13. double mag;
  14.  
  15. if( (mag = f__cabs(z->r, z->i)) == 0.)
  16.     r->r = r->i = 0.;
  17. else if(z->r > 0)
  18.     {
  19.     r->r = sqrt(0.5 * (mag + z->r) );
  20.     r->i = z->i / r->r / 2;
  21.     }
  22. else
  23.     {
  24.     r->i = sqrt(0.5 * (mag - z->r) );
  25.     if(z->i < 0)
  26.         r->i = - r->i;
  27.     r->r = z->i / r->i / 2;
  28.     }
  29. }
  30.