Mercurial > octave
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 |
rev | line source |
---|---|
1648 | 1 /* |
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 | 8 |
9 This file is part of Octave. | |
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 | 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 | 20 |
21 You should have received a copy of the GNU General Public License | |
7016 | 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 | 24 |
25 */ | |
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 | 28 #define octave_oct_cmplx_h 1 |
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 | 32 #include <complex> |
33 | |
3504 | 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 | 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 | 239 #endif |