home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c081_11 / 2.ddi / INCLUDE.ZIP / COMPLEX.H < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-13  |  6.9 KB  |  273 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,1991
  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
  28.  
  29. #if !defined( __MATH_H )
  30. #include <math.h>
  31. #endif
  32.  
  33. #ifdef __DLL__
  34. #define _FAR far
  35. #else
  36. #define _FAR
  37. #endif
  38.  
  39. #if   defined(__SMALL__) || defined(__MEDIUM__)
  40. #define _CLASSTYPE  near
  41. #elif defined(__COMPACT__) || defined(__LARGE__)
  42. #define _CLASSTYPE  far
  43. #else
  44. #define _CLASSTYPE  huge
  45. #endif
  46.  
  47. class _CLASSTYPE complex {
  48.  
  49. public:
  50.     // constructors
  51.         complex(double __re_val, double __im_val=0);
  52.     complex();
  53.  
  54.     // complex manipulations
  55.     friend double _Cdecl real(complex&);   // the real part
  56.     friend double _Cdecl imag(complex&);   // the imaginary part
  57.     friend complex _Cdecl conj(complex&);  // the complex conjugate
  58.     friend double _Cdecl norm(complex&);   // the square of the magnitude
  59.     friend double _Cdecl arg(complex&);    // the angle in the plane
  60.  
  61.     // Create a complex object given polar coordinates
  62.     friend complex _Cdecl polar(double __mag, double __angle=0);
  63.  
  64.     // Overloaded ANSI C math functions
  65.     friend double  _Cdecl abs(complex&);
  66.     friend complex _Cdecl acos(complex&);
  67.     friend complex _Cdecl asin(complex&);
  68.     friend complex _Cdecl atan(complex&);
  69.     friend complex _Cdecl cos(complex&);
  70.     friend complex _Cdecl cosh(complex&);
  71.     friend complex _Cdecl exp(complex&);
  72.     friend complex _Cdecl log(complex&);
  73.     friend complex _Cdecl log10(complex&);
  74.     friend complex _Cdecl pow(complex& __base, double __expon);
  75.     friend complex _Cdecl pow(double __base, complex& __expon);
  76.     friend complex _Cdecl pow(complex& __base, complex& __expon);
  77.     friend complex _Cdecl sin(complex&);
  78.     friend complex _Cdecl sinh(complex&);
  79.     friend complex _Cdecl sqrt(complex&);
  80.     friend complex _Cdecl tan(complex&);
  81.     friend complex _Cdecl tanh(complex&);
  82.  
  83.     // Binary Operator Functions
  84.     friend complex _Cdecl operator+(complex&, complex&);
  85.     friend complex _Cdecl operator+(double, complex&);
  86.         friend complex _Cdecl operator+(complex&, double);
  87.     friend complex _Cdecl operator-(complex&, complex&);
  88.     friend complex _Cdecl operator-(double, complex&);
  89.         friend complex _Cdecl operator-(complex&, double);
  90.     friend complex _Cdecl operator*(complex&, complex&);
  91.         friend complex _Cdecl operator*(complex&, double);
  92.     friend complex _Cdecl operator*(double, complex&);
  93.     friend complex _Cdecl operator/(complex&, complex&);
  94.         friend complex _Cdecl operator/(complex&, double);
  95.     friend complex _Cdecl operator/(double, complex&);
  96.     friend int _Cdecl operator==(complex&, complex&);
  97.     friend int _Cdecl operator!=(complex&, complex&);
  98.     complex& _Cdecl operator+=(complex&);
  99.     complex& _Cdecl operator+=(double);
  100.     complex& _Cdecl operator-=(complex&);
  101.     complex& _Cdecl operator-=(double);
  102.     complex& _Cdecl operator*=(complex&);
  103.     complex& _Cdecl operator*=(double);
  104.     complex& _Cdecl operator/=(complex&);
  105.     complex& _Cdecl operator/=(double);
  106.     complex _Cdecl operator+();
  107.     complex _Cdecl operator-();
  108.  
  109. // Implementation
  110. private:
  111.         double re, im;
  112. };
  113.  
  114.  
  115. // Inline complex functions
  116.  
  117. inline complex::complex(double __re_val, double __im_val)
  118. {
  119.     re = __re_val;
  120.     im = __im_val;
  121. }
  122.  
  123. inline complex::complex()
  124. {
  125. /* if you want your complex numbers initialized ...
  126.     re = im = 0;
  127. */
  128. }
  129.  
  130. inline complex _Cdecl complex::operator+()
  131. {
  132.     return *this;
  133. }
  134.  
  135. inline complex _Cdecl complex::operator-()
  136. {
  137.     return complex(-re, -im);
  138. }
  139.  
  140.  
  141. // Definitions of compound-assignment operator member functions
  142.  
  143. inline complex& _Cdecl complex::operator+=(complex& __z2)
  144. {
  145.     re += __z2.re;
  146.     im += __z2.im;
  147.     return *this;
  148. }
  149.  
  150. inline complex& _Cdecl complex::operator+=(double __re_val2)
  151. {
  152.     re += __re_val2;
  153.     return *this;
  154. }
  155.  
  156. inline complex& _Cdecl complex::operator-=(complex& __z2)
  157. {
  158.     re -= __z2.re;
  159.     im -= __z2.im;
  160.     return *this;
  161. }
  162.  
  163. inline complex& _Cdecl complex::operator-=(double __re_val2)
  164. {
  165.     re -= __re_val2;
  166.     return *this;
  167. }
  168.  
  169. inline complex& _Cdecl complex::operator*=(double __re_val2)
  170. {
  171.     re *= __re_val2;
  172.     im *= __re_val2;
  173.     return *this;
  174. }
  175.  
  176. inline complex& _Cdecl complex::operator/=(double __re_val2)
  177. {
  178.     re /= __re_val2;
  179.     im /= __re_val2;
  180.     return *this;
  181. }
  182.  
  183.  
  184. // Definitions of non-member complex functions
  185.  
  186. inline double _Cdecl real(complex& __z)
  187. {
  188.     return __z.re;
  189. }
  190.  
  191. inline double _Cdecl imag(complex& __z)
  192. {
  193.     return __z.im;
  194. }
  195.  
  196. inline complex _Cdecl conj(complex& __z)
  197. {
  198.     return complex(__z.re, -__z.im);
  199. }
  200.  
  201. inline complex _Cdecl polar(double __mag, double __angle)
  202. {
  203.     return complex(__mag*cos(__angle), __mag*sin(__angle));
  204. }
  205.  
  206.  
  207. // Definitions of non-member binary operator functions
  208.  
  209. inline complex _Cdecl operator+(complex& __z1, complex& __z2)
  210. {
  211.     return complex(__z1.re + __z2.re, __z1.im + __z2.im);
  212. }
  213.  
  214. inline complex _Cdecl operator+(double __re_val1, complex& __z2)
  215. {
  216.     return complex(__re_val1 + __z2.re, __z2.im);
  217. }
  218.  
  219. inline complex _Cdecl operator+(complex& __z1, double __re_val2)
  220. {
  221.     return complex(__z1.re + __re_val2, __z1.im);
  222. }
  223.  
  224. inline complex _Cdecl operator-(complex& __z1, complex& __z2)
  225. {
  226.     return complex(__z1.re - __z2.re, __z1.im - __z2.im);
  227. }
  228.  
  229. inline complex _Cdecl operator-(double __re_val1, complex& __z2)
  230. {
  231.     return complex(__re_val1 - __z2.re, -__z2.im);
  232. }
  233.  
  234. inline complex _Cdecl operator-(complex& __z1, double __re_val2)
  235. {
  236.     return complex(__z1.re - __re_val2, __z1.im);
  237. }
  238.  
  239. inline complex _Cdecl operator*(complex& __z1, double __re_val2)
  240. {
  241.     return complex(__z1.re*__re_val2, __z1.im*__re_val2);
  242. }
  243.  
  244. inline complex _Cdecl operator*(double __re_val1, complex& __z2)
  245. {
  246.     return complex(__z2.re*__re_val1, __z2.im*__re_val1);
  247. }
  248.  
  249. inline complex _Cdecl operator/(complex& __z1, double __re_val2)
  250. {
  251.     return complex(__z1.re/__re_val2, __z1.im/__re_val2);
  252. }
  253.  
  254. inline int _Cdecl operator==(complex& __z1, complex& __z2)
  255. {
  256.     return __z1.re == __z2.re && __z1.im == __z2.im;
  257. }
  258.  
  259. inline int _Cdecl operator!=(complex& __z1, complex& __z2)
  260. {
  261.     return __z1.re != __z2.re || __z1.im != __z2.im;
  262. }
  263.  
  264.  
  265. // Complex stream I/O
  266.  
  267. #include <iostream.h>
  268.  
  269. ostream& _Cdecl operator<<(ostream&, complex&);
  270. istream& _Cdecl operator>>(istream&, complex&);
  271.  
  272. #endif  // __COMPLEX_H
  273.