dcomplex.h
上传用户:sichengcw
上传日期:2009-02-17
资源大小:202k
文件大小:4k
源码类别:

STL

开发平台:

Visual C++

  1. // The -*- C++ -*- double_complex class.
  2. // Copyright (C) 1994 Free Software Foundation
  3. // This file is part of the GNU ANSI C++ Library.  This library is free
  4. // software; you can redistribute it and/or modify it under the
  5. // terms of the GNU General Public License as published by the
  6. // Free Software Foundation; either version 2, or (at your option)
  7. // any later version.
  8. // This library is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. // GNU General Public License for more details.
  12. // You should have received a copy of the GNU General Public License
  13. // along with this library; see the file COPYING.  If not, write to the Free
  14. // Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  15. // As a special exception, if you link this library with files
  16. // compiled with a GNU compiler to produce an executable, this does not cause
  17. // the resulting executable to be covered by the GNU General Public License.
  18. // This exception does not however invalidate any other reasons why
  19. // the executable file might be covered by the GNU General Public License.
  20. // Written by Jason Merrill based upon the specification in the 27 May 1994
  21. // C++ working paper, ANSI document X3J16/94-0098.
  22. #ifndef __DCOMPLEX__
  23. #define __DCOMPLEX__
  24. #ifdef __GNUG__
  25. #pragma interface "dcomplex"
  26. #endif
  27. extern "C++" {
  28. class complex<double>
  29. {
  30. public:
  31.   complex (double r = 0, double i = 0): re (r), im (i) { }
  32.   complex (const complex<float>& r): re (r.real ()), im (r.imag ()) { }
  33.   explicit complex (const complex<long double>& r);
  34.   complex& operator+= (const complex& r) { return __doapl (this, r); }
  35.   complex& operator-= (const complex& r) { return __doami (this, r); }
  36.   complex& operator*= (const complex& r) { return __doaml (this, r); }
  37.   complex& operator/= (const complex& r) { return __doadv (this, r); }
  38.   double real () const { return re; }
  39.   double imag () const { return im; }
  40. private:
  41.   double re, im;
  42.   friend complex& __doapl<> (complex *, const complex&);
  43.   friend complex& __doami<> (complex *, const complex&);
  44.   friend complex& __doaml<> (complex *, const complex&);
  45.   friend complex& __doadv<> (complex *, const complex&);
  46. #ifndef __STRICT_ANSI__
  47.   friend inline complex operator + (const complex& x, double y)
  48.     { return operator+<> (x, y); }
  49.   friend inline complex operator + (double x, const complex& y)
  50.     { return operator+<> (x, y); }
  51.   friend inline complex operator - (const complex& x, double y)
  52.     { return operator-<> (x, y); }
  53.   friend inline complex operator - (double x, const complex& y)
  54.     { return operator-<> (x, y); }
  55.   friend inline complex operator * (const complex& x, double y)
  56.     { return operator*<> (x, y); }
  57.   friend inline complex operator * (double x, const complex& y)
  58.     { return operator*<> (x, y); }
  59.   friend inline complex operator / (const complex& x, double y)
  60.     { return operator/<> (x, y); }
  61.   friend inline complex operator / (double x, const complex& y)
  62.     { return operator/<> (x, y); }
  63.   friend inline bool operator == (const complex& x, double y)
  64.     { return operator==<> (x, y); }
  65.   friend inline bool operator == (double x, const complex& y)
  66.     { return operator==<> (x, y); }
  67.   friend inline bool operator != (const complex& x, double y)
  68.     { return operator!=<> (x, y); }
  69.   friend inline bool operator != (double x, const complex& y)
  70.     { return operator!=<> (x, y); }
  71. #endif /* __STRICT_ANSI__ */
  72. };
  73. inline complex<float>::complex (const complex<double>& r)
  74. : re (r.real ()), im (r.imag ())
  75. { }
  76. } // extern "C++"
  77. #endif