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

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