home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c021 / 7.img / INCLUDE.ZIP / COMPLEX.H < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-04  |  6.5 KB  |  256 lines

  1. /* complex.h
  2.  
  3.     Complex Number Library - Include File
  4.     class complex:  declarations for complex numbers.
  5.  
  6.     Copyright (c) Borland International 1990
  7.     All Rights Reserved.
  8.  
  9. All function names, member names, and operators have been borrowed
  10. from AT&T C++, except for the addition of:
  11.  
  12.     friend complex _Cdecl acos(complex&);
  13.     friend complex _Cdecl asin(complex&);
  14.     friend complex _Cdecl atan(complex&);
  15.     friend complex _Cdecl log10(complex&);
  16.     friend complex _Cdecl tan(complex&);
  17.     friend complex _Cdecl tanh(complex&);
  18.     complex _Cdecl operator+();
  19.     complex _Cdecl operator-();
  20. */
  21.  
  22. #ifndef __cplusplus
  23. #error Must use C++ for the type complex.
  24. #endif
  25.  
  26. #if    !defined(_COMPLEX_H)
  27. #define _COMPLEX_H    1
  28.  
  29. #include <math.h>
  30.  
  31. class complex {
  32.  
  33. public:
  34.     // constructors
  35.         complex(double __re_val, double __im_val=0);
  36.     complex();
  37.  
  38.     // complex manipulations
  39.     friend double _Cdecl real(complex&);   // the real part
  40.     friend double _Cdecl imag(complex&);   // the imaginary part
  41.     friend complex _Cdecl conj(complex&);  // the complex conjugate
  42.     friend double _Cdecl norm(complex&);   // the square of the magnitude
  43.     friend double _Cdecl arg(complex&);    // the angle in the plane
  44.         friend complex _Cdecl polar(double __mag, double __angle=0);
  45.             // Create a complex object given polar coordinates
  46.  
  47.     // Overloaded ANSI C math functions
  48.     friend double  _Cdecl abs(complex&);
  49.     friend complex _Cdecl acos(complex&);
  50.     friend complex _Cdecl asin(complex&);
  51.     friend complex _Cdecl atan(complex&);
  52.     friend complex _Cdecl cos(complex&);
  53.     friend complex _Cdecl cosh(complex&);
  54.     friend complex _Cdecl exp(complex&);
  55.     friend complex _Cdecl log(complex&);
  56.     friend complex _Cdecl log10(complex&);
  57.     friend complex _Cdecl pow(complex& __base, double __expon);
  58.     friend complex _Cdecl pow(double __base, complex& __expon);
  59.     friend complex _Cdecl pow(complex& __base, complex& __expon);
  60.     friend complex _Cdecl sin(complex&);
  61.     friend complex _Cdecl sinh(complex&);
  62.     friend complex _Cdecl sqrt(complex&);
  63.     friend complex _Cdecl tan(complex&);
  64.     friend complex _Cdecl tanh(complex&);
  65.  
  66.     // Binary Operator Functions
  67.     friend complex _Cdecl operator+(complex&, complex&);
  68.     friend complex _Cdecl operator+(double, complex&);
  69.         friend complex _Cdecl operator+(complex&, double);
  70.     friend complex _Cdecl operator-(complex&, complex&);
  71.     friend complex _Cdecl operator-(double, complex&);
  72.         friend complex _Cdecl operator-(complex&, double);
  73.     friend complex _Cdecl operator*(complex&, complex&);
  74.         friend complex _Cdecl operator*(complex&, double);
  75.     friend complex _Cdecl operator*(double, complex&);
  76.     friend complex _Cdecl operator/(complex&, complex&);
  77.         friend complex _Cdecl operator/(complex&, double);
  78.     friend complex _Cdecl operator/(double, complex&);
  79.     friend int _Cdecl operator==(complex&, complex&);
  80.     friend int _Cdecl operator!=(complex&, complex&);
  81.     complex& _Cdecl operator+=(complex&);
  82.     complex& _Cdecl operator+=(double);
  83.     complex& _Cdecl operator-=(complex&);
  84.     complex& _Cdecl operator-=(double);
  85.     complex& _Cdecl operator*=(complex&);
  86.     complex& _Cdecl operator*=(double);
  87.     complex& _Cdecl operator/=(complex&);
  88.     complex& _Cdecl operator/=(double);
  89.     complex _Cdecl operator+();
  90.     complex _Cdecl operator-();
  91.  
  92. // Implementation
  93. private:
  94.         double re, im;
  95. };
  96.  
  97.  
  98. // Inline complex functions
  99.  
  100. inline complex::complex(double __re_val, double __im_val)
  101. {
  102.         re = __re_val;
  103.         im = __im_val;
  104. }
  105.  
  106. inline complex::complex()
  107. {
  108. /* if you want your complex numbers initialized ...
  109.     re = im = 0;
  110. */
  111. }
  112.  
  113. inline complex _Cdecl complex::operator+()
  114. {
  115.     return *this;
  116. }
  117.  
  118. inline complex _Cdecl complex::operator-()
  119. {
  120.     return complex(-re, -im);
  121. }
  122.  
  123.  
  124. // Definitions of compound-assignment operator member functions
  125.  
  126. inline complex& _Cdecl complex::operator+=(complex& __z2)
  127. {
  128.         re += __z2.re;
  129.         im += __z2.im;
  130.     return *this;
  131. }
  132.  
  133. inline complex& _Cdecl complex::operator+=(double __re_val2)
  134. {
  135.         re += __re_val2;
  136.     return *this;
  137. }
  138.  
  139. inline complex& _Cdecl complex::operator-=(complex& __z2)
  140. {
  141.         re -= __z2.re;
  142.         im -= __z2.im;
  143.     return *this;
  144. }
  145.  
  146. inline complex& _Cdecl complex::operator-=(double __re_val2)
  147. {
  148.         re -= __re_val2;
  149.     return *this;
  150. }
  151.  
  152. inline complex& _Cdecl complex::operator*=(double __re_val2)
  153. {
  154.         re *= __re_val2;
  155.         im *= __re_val2;
  156.     return *this;
  157. }
  158.  
  159. inline complex& _Cdecl complex::operator/=(double __re_val2)
  160. {
  161.         re /= __re_val2;
  162.         im /= __re_val2;
  163.     return *this;
  164. }
  165.  
  166.  
  167. // Definitions of non-member complex functions
  168.  
  169. inline double _Cdecl real(complex& __z)
  170. {
  171.         return __z.re;
  172. }
  173.  
  174. inline double _Cdecl imag(complex& __z)
  175. {
  176.         return __z.im;
  177. }
  178.  
  179. inline complex _Cdecl conj(complex& __z)
  180. {
  181.         return complex(__z.re, -__z.im);
  182. }
  183.  
  184. inline complex _Cdecl polar(double __mag, double __angle)
  185. {
  186.         return complex(__mag*cos(__angle), __mag*sin(__angle));
  187. }
  188.  
  189.  
  190. // Definitions of non-member binary operator functions
  191.  
  192. inline complex _Cdecl operator+(complex& __z1, complex& __z2)
  193. {
  194.         return complex(__z1.re + __z2.re, __z1.im + __z2.im);
  195. }
  196.  
  197. inline complex _Cdecl operator+(double __re_val1, complex& __z2)
  198. {
  199.         return complex(__re_val1 + __z2.re, __z2.im);
  200. }
  201.  
  202. inline complex _Cdecl operator+(complex& __z1, double __re_val2)
  203. {
  204.         return complex(__z1.re + __re_val2, __z1.im);
  205. }
  206.  
  207. inline complex _Cdecl operator-(complex& __z1, complex& __z2)
  208. {
  209.         return complex(__z1.re - __z2.re, __z1.im - __z2.im);
  210. }
  211.  
  212. inline complex _Cdecl operator-(double __re_val1, complex& __z2)
  213. {
  214.         return complex(__re_val1 - __z2.re, -__z2.im);
  215. }
  216.  
  217. inline complex _Cdecl operator-(complex& __z1, double __re_val2)
  218. {
  219.         return complex(__z1.re - __re_val2, __z1.im);
  220. }
  221.  
  222. inline complex _Cdecl operator*(complex& __z1, double __re_val2)
  223. {
  224.         return complex(__z1.re*__re_val2, __z1.im*__re_val2);
  225. }
  226.  
  227. inline complex _Cdecl operator*(double __re_val1, complex& __z2)
  228. {
  229.         return complex(__z2.re*__re_val1, __z2.im*__re_val1);
  230. }
  231.  
  232. inline complex _Cdecl operator/(complex& __z1, double __re_val2)
  233. {
  234.         return complex(__z1.re/__re_val2, __z1.im/__re_val2);
  235. }
  236.  
  237. inline int _Cdecl operator==(complex& __z1, complex& __z2)
  238. {
  239.         return __z1.re == __z2.re && __z1.im == __z2.im;
  240. }
  241.  
  242. inline int _Cdecl operator!=(complex& __z1, complex& __z2)
  243. {
  244.         return __z1.re != __z2.re || __z1.im != __z2.im;
  245. }
  246.  
  247.  
  248. // Complex stream I/O
  249.  
  250. #include <iostream.h>
  251.  
  252. ostream& _Cdecl operator<<(ostream&, complex&);
  253. istream& _Cdecl operator>>(istream&, complex&);
  254.  
  255. #endif
  256.