home *** CD-ROM | disk | FTP | other *** search
- #include <my_complex.h>
- int complex_error( c_exception& x)
- {
- cout << "complex error\n";
- }
-
- complex asin(complex x)
- {
- return(complex(0.0,-1.0)*lnn(complex(0.0,1.0)*x+my_sqrt(complex(1.0,0.0)-
- x*x)));
- }
- complex acos(complex x)
- {
- return(complex(0.0,-1.0)*lnn(x+complex(0.0,1.0)*my_sqrt(complex(1.0,0.0)-
- x*x)));
- }
- complex atan(complex x)
- {
- return(complex(0.0,0.5)*lnn((complex(0.0,1.0)+x)/(complex(0.0,1.0)-x)));
- }
- complex lnn(complex x)
- {
- double dd,rr,ii,l,arg;
- complex ret;
- rr = real(x);
- ii = imag(x);
-
- dd = rr*rr+ii*ii;
- l = log(sqrt(dd));
- if (rr == 0.0)
- {
- if (ii > 0.0)
- {
- arg = asin(1.0);
- }
- else
- {
- arg = asin(-1.0);
- }
- }
- else if (rr >= 0.0)
- arg = atan(ii/rr);
- else if (ii >= 0.0)
- arg = PI + atan(ii/rr);
- else
- arg = -1.0*PI + atan(ii/rr);
- ret = complex(l,arg);
- return(ret);
- }
- complex tan(complex x)
- {
- return(sin(x)/cos(x));
- }
- complex tanh(complex x)
- {
- return(sinh(x)/cosh(x));
- }
- complex sec(complex x)
- {
- return(complex(1.0,0.0)/cos(x));
- }
- complex csc(complex x)
- {
- return(complex(1.0,0.0)/sin(x));
- }
- complex cot(complex x)
- {
- return(cos(x)/sin(x));
- }
- complex coth(complex x)
- {
- return(cosh(x)/sinh(x));
- }
- complex sech(complex x)
- {
- return(complex(1.0,0.0)/cosh(x));
- }
- complex csch(complex x)
- {
- return(complex(1.0,0.0)/sinh(x));
- }
- complex expt(complex x,complex y)
- {
- complex a,b;
- if (real(y) == 0.0 && imag(y) == 0.0)
- b = complex(1.0,0.0);
- else
- {
- a = lnn(x)*y;
- b = exp(a);
- }
- return(b);
- }
- complex my_sqrt(complex x)
- {
- return(expt(x,complex(0.5,0.0)));
- }
- complex asinh(complex x)
- {
- return(lnn(x+my_sqrt(complex(1.0,0.0)+ x*x)));
- }
- complex acosh(complex x)
- {
- return(lnn(x+my_sqrt(complex(-1.0,0.0)+
- x*x)));
- }
- complex atanh(complex x)
- {
- return(complex(0.5,0.0)*lnn((complex(1.0,0.0)+x)/(complex(1.0,0.0)-x)));
- }
-