home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_144 / 1.ddi / INCLUDE.ZIP / COMPLEX.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  7.8 KB  |  277 lines

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