annotate liboctave/util/oct-cmplx.h @ 27919:1891570abac8

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2020.
author John W. Eaton <jwe@octave.org>
date Mon, 06 Jan 2020 22:29:51 -0500
parents b442ec6dda5c
children bd51beb6205e
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
27919
1891570abac8 update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 27918
diff changeset
3 Copyright (C) 1995-2020 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
4
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
5 See the file COPYRIGHT.md in the top-level directory of this distribution
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
6 or <https://octave.org/COPYRIGHT.html/>.
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
7
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
8
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
9 This file is part of Octave.
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
10
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24448
diff changeset
11 Octave is free software: you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
12 under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24448
diff changeset
13 the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
14 (at your option) any later version.
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
15
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
16 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
17 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
19 GNU General Public License for more details.
1648
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 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5307
diff changeset
22 along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24448
diff changeset
23 <https://www.gnu.org/licenses/>.
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
24
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
25 */
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
26
20791
f7084eae3318 maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents: 19923
diff changeset
27 #if ! defined (octave_oct_cmplx_h)
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
28 #define octave_oct_cmplx_h 1
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
29
21244
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21225
diff changeset
30 #include "octave-config.h"
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21225
diff changeset
31
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
32 #include <complex>
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
33
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 2847
diff changeset
34 typedef std::complex<double> Complex;
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
35 typedef std::complex<float> FloatComplex;
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
36
24448
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
37 // For complex-complex and complex-real comparisons, Octave uses the following
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
38 // ordering: compare absolute values first; if they match, compare phase
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
39 // angles. This is partially inconsistent with M*b, which compares complex
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
40 // numbers only by their real parts; OTOH, it uses the same definition for
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
41 // max/min and sort. The abs/arg comparison is definitely more useful (the
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
42 // other one is emulated rather trivially), so let's be consistent and use that
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
43 // all over.
8751
9f7ce4bf7650 optimize min/max functions
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
44
19635
bdf90710dddf Map -pi to pi for principal argument used in complex operators (bug #43313).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 18084
diff changeset
45 // The standard C library function arg() returns [-pi,pi], which creates a
bdf90710dddf Map -pi to pi for principal argument used in complex operators (bug #43313).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 18084
diff changeset
46 // non-unique representation for numbers along the negative real axis branch
bdf90710dddf Map -pi to pi for principal argument used in complex operators (bug #43313).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 18084
diff changeset
47 // cut. Change this to principal value (-pi,pi] by mapping -pi to pi.
bdf90710dddf Map -pi to pi for principal argument used in complex operators (bug #43313).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 18084
diff changeset
48
24448
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
49 #if ! defined (__APPLE__)
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
50
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
51 // General templated code for all (double, float) complex operators
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
52 # define DEF_COMPLEXR_COMP(OP, OPS) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
53 template <typename T> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
54 inline bool operator OP (const std::complex<T>& a, \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
55 const std::complex<T>& b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
56 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
57 OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
58 OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
59 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
60 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
61 OCTAVE_FLOAT_TRUNCATE const T ay = std::arg (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
62 OCTAVE_FLOAT_TRUNCATE const T by = std::arg (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
63 if (ay == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
64 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
65 if (by != static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
66 return static_cast<T> (M_PI) OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
67 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
68 else if (by == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
69 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
70 return ay OP static_cast<T> (M_PI); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
71 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
72 return ay OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
73 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
74 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
75 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
76 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
77 template <typename T> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
78 inline bool operator OP (const std::complex<T>& a, T b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
79 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
80 OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
81 OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
82 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
83 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
84 OCTAVE_FLOAT_TRUNCATE const T ay = std::arg (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
85 if (ay == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
86 return static_cast<T> (M_PI) OP 0; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
87 return ay OP 0; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
88 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
89 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
90 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
91 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
92 template <typename T> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
93 inline bool operator OP (T a, const std::complex<T>& b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
94 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
95 OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
96 OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
97 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
98 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
99 OCTAVE_FLOAT_TRUNCATE const T by = std::arg (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
100 if (by == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
101 return 0 OP static_cast<T> (M_PI); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
102 return 0 OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
103 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
104 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
105 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
106 }
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
107
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
108 #else
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
109 // Apple specialization.
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
110
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
111 // FIXME: Apple's math library chooses to return a different value for
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
112 // std::arg with floats than the constant static_cast<float> (M_PI).
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
113 // Work around this obtuse behavior by providing the constant A_PI which
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
114 // is Apple's definition of the constant PI for float variables.
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
115 // The template code for doubles is the same as that for UNIX platforms.
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
116 // Use C++ template specialization to add specific functions for float
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
117 // values that make use of A_PI.
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
118
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
119 // Apple version of PI
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
120 # define A_PI 3.1415925025939941f
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
121
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
122 # define DEF_COMPLEXR_COMP(OP, OPS) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
123 template <typename T> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
124 inline bool operator OP (const std::complex<T>& a, \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
125 const std::complex<T>& b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
126 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
127 OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
128 OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
129 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
130 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
131 OCTAVE_FLOAT_TRUNCATE const T ay = std::arg (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
132 OCTAVE_FLOAT_TRUNCATE const T by = std::arg (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
133 if (ay == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
134 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
135 if (by != static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
136 return static_cast<T> (M_PI) OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
137 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
138 else if (by == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
139 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
140 return ay OP static_cast<T> (M_PI); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
141 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
142 return ay OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
143 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
144 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
145 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
146 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
147 template <typename T> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
148 inline bool operator OP (const std::complex<T>& a, T b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
149 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
150 OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
151 OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
152 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
153 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
154 OCTAVE_FLOAT_TRUNCATE const T ay = std::arg (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
155 if (ay == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
156 return static_cast<T> (M_PI) OP 0; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
157 return ay OP 0; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
158 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
159 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
160 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
161 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
162 template <typename T> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
163 inline bool operator OP (T a, const std::complex<T>& b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
164 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
165 OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
166 OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
167 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
168 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
169 OCTAVE_FLOAT_TRUNCATE const T by = std::arg (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
170 if (by == static_cast<T> (-M_PI)) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
171 return 0 OP static_cast<T> (M_PI); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
172 return 0 OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
173 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
174 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
175 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
176 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
177 template <> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
178 inline bool operator OP<float> (const std::complex<float>& a, \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
179 const std::complex<float>& b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
180 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
181 OCTAVE_FLOAT_TRUNCATE const float ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
182 OCTAVE_FLOAT_TRUNCATE const float bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
183 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
184 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
185 OCTAVE_FLOAT_TRUNCATE const float ay = std::arg (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
186 OCTAVE_FLOAT_TRUNCATE const float by = std::arg (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
187 if (ay == -A_PI) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
188 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
189 if (by != -A_PI) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
190 return static_cast<float> (M_PI) OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
191 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
192 else if (by == -A_PI) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
193 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
194 return ay OP static_cast<float> (M_PI); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
195 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
196 return ay OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
197 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
198 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
199 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
200 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
201 template <> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
202 inline bool operator OP<float> (const std::complex<float>& a, float b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
203 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
204 OCTAVE_FLOAT_TRUNCATE const float ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
205 OCTAVE_FLOAT_TRUNCATE const float bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
206 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
207 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
208 OCTAVE_FLOAT_TRUNCATE const float ay = std::arg (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
209 if (ay == -A_PI) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
210 return static_cast<float> (M_PI) OP 0; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
211 return ay OP 0; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
212 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
213 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
214 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
215 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
216 template <> \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
217 inline bool operator OP<float> (float a, const std::complex<float>& b) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
218 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
219 OCTAVE_FLOAT_TRUNCATE const float ax = std::abs (a); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
220 OCTAVE_FLOAT_TRUNCATE const float bx = std::abs (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
221 if (ax == bx) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
222 { \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
223 OCTAVE_FLOAT_TRUNCATE const float by = std::arg (b); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
224 if (by == -A_PI) \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
225 return 0 OP static_cast<float> (M_PI); \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
226 return 0 OP by; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
227 } \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
228 else \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
229 return ax OPS bx; \
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
230 }
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
231
138c2380521c Fix failing sort of complex values on Mac platforms (bug #52627).
Rik <rik@octave.org>
parents: 23220
diff changeset
232 #endif
9578
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
233
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
234 DEF_COMPLEXR_COMP (>, >)
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
235 DEF_COMPLEXR_COMP (<, <)
9594
01004c3cde2c fix non-strict complex comparisons
Jaroslav Hajek <highegg@gmail.com>
parents: 9578
diff changeset
236 DEF_COMPLEXR_COMP (<=, <)
01004c3cde2c fix non-strict complex comparisons
Jaroslav Hajek <highegg@gmail.com>
parents: 9578
diff changeset
237 DEF_COMPLEXR_COMP (>=, >)
8751
9f7ce4bf7650 optimize min/max functions
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
238
1648
65ef5beea500 [project @ 1995-12-20 06:43:29 by jwe]
jwe
parents:
diff changeset
239 #endif