home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 509.lha / ATS_v2.0 / my_complex.cp < prev    next >
Text File  |  1991-05-06  |  2KB  |  111 lines

  1. #include <my_complex.h>
  2. int complex_error( c_exception& x)
  3.     {
  4.     cout << "complex error\n";
  5.     }
  6.  
  7. complex asin(complex x)
  8.     {
  9.     return(complex(0.0,-1.0)*lnn(complex(0.0,1.0)*x+my_sqrt(complex(1.0,0.0)-
  10.         x*x)));
  11.     }
  12. complex acos(complex x)
  13.     {
  14.     return(complex(0.0,-1.0)*lnn(x+complex(0.0,1.0)*my_sqrt(complex(1.0,0.0)-
  15.         x*x)));
  16.     }
  17. complex atan(complex x)
  18.     {
  19.     return(complex(0.0,0.5)*lnn((complex(0.0,1.0)+x)/(complex(0.0,1.0)-x)));
  20.     }
  21. complex lnn(complex x)
  22.     {
  23.     double dd,rr,ii,l,arg;
  24.     complex ret;
  25.     rr = real(x);
  26.     ii = imag(x);
  27.     
  28.     dd = rr*rr+ii*ii;
  29.     l = log(sqrt(dd));
  30.     if (rr == 0.0)
  31.         {
  32.         if (ii > 0.0)
  33.             {
  34.             arg = asin(1.0);
  35.             }
  36.         else
  37.             {
  38.             arg = asin(-1.0);
  39.             }
  40.         }
  41.     else if (rr >= 0.0)
  42.         arg = atan(ii/rr);
  43.     else if (ii >= 0.0) 
  44.         arg = PI + atan(ii/rr);
  45.     else 
  46.         arg = -1.0*PI + atan(ii/rr);
  47.     ret = complex(l,arg);
  48.     return(ret);
  49.     }
  50. complex tan(complex x)
  51.     {
  52.     return(sin(x)/cos(x));
  53.     }
  54. complex tanh(complex x)
  55.     {
  56.     return(sinh(x)/cosh(x));
  57.     }
  58. complex sec(complex x)
  59.     {
  60.     return(complex(1.0,0.0)/cos(x));
  61.     }
  62. complex csc(complex x)
  63.     {
  64.     return(complex(1.0,0.0)/sin(x));
  65.     }
  66. complex cot(complex x)
  67.     {
  68.     return(cos(x)/sin(x));
  69.     }
  70. complex coth(complex x)
  71.     {
  72.     return(cosh(x)/sinh(x));
  73.     }
  74. complex sech(complex x) 
  75.     {
  76.     return(complex(1.0,0.0)/cosh(x));
  77.     }
  78. complex csch(complex x)
  79.     {
  80.     return(complex(1.0,0.0)/sinh(x));
  81.     }
  82. complex expt(complex x,complex y)
  83.     {
  84.     complex a,b;
  85.     if (real(y) == 0.0 && imag(y) == 0.0)
  86.         b = complex(1.0,0.0);
  87.     else
  88.         {
  89.         a = lnn(x)*y;
  90.         b = exp(a);
  91.         }
  92.     return(b);
  93.     }
  94. complex my_sqrt(complex x)
  95.     {
  96.     return(expt(x,complex(0.5,0.0)));
  97.     }
  98. complex asinh(complex x)
  99.     {
  100.     return(lnn(x+my_sqrt(complex(1.0,0.0)+    x*x)));
  101.     }
  102. complex acosh(complex x)
  103.     {
  104.     return(lnn(x+my_sqrt(complex(-1.0,0.0)+
  105.         x*x)));
  106.     }
  107. complex atanh(complex x)
  108.     {
  109.     return(complex(0.5,0.0)*lnn((complex(1.0,0.0)+x)/(complex(1.0,0.0)-x)));
  110.     }
  111.