annotate liboctave/oct-cmplx.h @ 5103:e2ed74b9bfa0 after-gnuplot-split

[project @ 2004-12-28 02:43:01 by jwe]
author jwe
date Tue, 28 Dec 2004 02:43:01 +0000
parents d0b8964b9d4b
children deed800e7bef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
1 /*
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
2
2847
8b262e771614 [project @ 1997-03-27 16:18:26 by jwe]
jwe
parents: 1993
diff changeset
3 Copyright (C) 1996, 1997 John W. Eaton
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
4
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
6
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
10 later version.
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
11
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
15 for more details.
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
16
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
20
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
21 */
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
22
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
23 #if !defined (octave_oct_cmplx_h)
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
24 #define octave_oct_cmplx_h 1
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
25
3775
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
26 // By using this file instead of <complex>, we can easily avoid buggy
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
27 // implementations of the standard complex data type (if needed).
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
28
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
29 #include <complex>
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
30
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 2847
diff changeset
31 typedef std::complex<double> Complex;
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
32
3775
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
33 #if defined (CXX_ISO_COMPLIANT_LIBRARY)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
34
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
35 // If namespaces don't work, we will end up with some infinite looping.
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
36
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
37 inline double
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
38 real (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
39 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
40 return std::real (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
41 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
42
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
43 inline double
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
44 imag (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
45 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
46 return std::imag (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
47 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
48
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
49 inline double
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
50 abs (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
51 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
52 return std::abs (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
53 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
54
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
55 inline double
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
56 arg (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
57 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
58 return std::arg (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
59 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
60
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
61 inline double
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
62 norm (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
63 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
64 return std::norm (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
65 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
66
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
67 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
68 conj (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
69 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
70 return std::conj (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
71 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
72
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
73 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
74 polar (const double& x, const double& y);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
75
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
76 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
77 cos (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
78 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
79 return std::cos (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
80 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
81
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
82 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
83 cosh (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
84 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
85 return std::cosh (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
86 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
87
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
88 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
89 exp (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
90 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
91 return std::exp (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
92 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
93
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
94 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
95 log (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
96 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
97 return std::log (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
98 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
99
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
100 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
101 log10 (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
102 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
103 return std::log10 (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
104 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
105
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
106 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
107 pow (const Complex& z, int n)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
108 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
109 return std::pow (z, n);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
110 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
111
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
112 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
113 pow (const Complex& z, const double& x)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
114 {
4921
d0b8964b9d4b [project @ 2004-07-28 15:53:46 by jwe]
jwe
parents: 3775
diff changeset
115 // XXX FIXME XXX -- this should not be needed, but it avoids a bug
d0b8964b9d4b [project @ 2004-07-28 15:53:46 by jwe]
jwe
parents: 3775
diff changeset
116 // in some versions of libstdc++ (3.3.x and possibly others).
d0b8964b9d4b [project @ 2004-07-28 15:53:46 by jwe]
jwe
parents: 3775
diff changeset
117
d0b8964b9d4b [project @ 2004-07-28 15:53:46 by jwe]
jwe
parents: 3775
diff changeset
118 return std::pow (z, Complex (x));
3775
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
119 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
120
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
121 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
122 pow (const Complex& z1, const Complex& z2)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
123 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
124 return std::pow (z1, z2);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
125 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
126
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
127 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
128 pow (const double& x, const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
129 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
130 return std::pow (x, z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
131 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
132
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
133 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
134 sin (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
135 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
136 return std::sin (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
137 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
138
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
139 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
140 sinh (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
141 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
142 return std::sinh (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
143 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
144
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
145 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
146 sqrt (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
147 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
148 return std::sqrt (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
149 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
150
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
151 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
152 tan (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
153 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
154 return std::tan (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
155 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
156
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
157 inline Complex
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
158 tanh (const Complex& z)
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
159 {
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
160 return std::tanh (z);
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
161 }
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
162
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
163 #endif
13905c3a24af [project @ 2001-02-06 01:56:59 by jwe]
jwe
parents: 3504
diff changeset
164
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
165 #endif
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
166
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
167 /*
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
168 ;;; Local Variables: ***
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
169 ;;; mode: C++ ***
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
170 ;;; End: ***
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
171 */