MyraMath
functions.h
Go to the documentation of this file.
1 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
2 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
3 // ========================================================================= //
4 
5 #ifndef MYRAMATH_EXPRESSION_FUNCTIONS_H
6 #define MYRAMATH_EXPRESSION_FUNCTIONS_H
7 
13 #include <myramath/MYRAMATH_EXPORT.h>
15 
16 namespace myra {
17 
18 // Forward declarations.
19 template<int Arity, class Number> class Expression;
20 
21 // ------------------------------------ Trigonometric functions (sin, cos, tan, asin, acos, atan2)
22 
24 MYRAMATH_EXPORT Expression<1,NumberS> sin (const Expression<1,NumberS>& A);
26 MYRAMATH_EXPORT Expression<1,NumberD> sin (const Expression<1,NumberD>& A);
27 MYRAMATH_EXPORT Expression<1,NumberC> sin (const Expression<1,NumberC>& A);
28 MYRAMATH_EXPORT Expression<1,NumberZ> sin (const Expression<1,NumberZ>& A);
29 MYRAMATH_EXPORT Expression<2,NumberS> sin (const Expression<2,NumberS>& A);
30 MYRAMATH_EXPORT Expression<2,NumberD> sin (const Expression<2,NumberD>& A);
31 MYRAMATH_EXPORT Expression<2,NumberC> sin (const Expression<2,NumberC>& A);
32 MYRAMATH_EXPORT Expression<2,NumberZ> sin (const Expression<2,NumberZ>& A);
34 
36 MYRAMATH_EXPORT Expression<1,NumberS> cos (const Expression<1,NumberS>& A);
38 MYRAMATH_EXPORT Expression<1,NumberD> cos (const Expression<1,NumberD>& A);
39 MYRAMATH_EXPORT Expression<1,NumberC> cos (const Expression<1,NumberC>& A);
40 MYRAMATH_EXPORT Expression<1,NumberZ> cos (const Expression<1,NumberZ>& A);
41 MYRAMATH_EXPORT Expression<2,NumberS> cos (const Expression<2,NumberS>& A);
42 MYRAMATH_EXPORT Expression<2,NumberD> cos (const Expression<2,NumberD>& A);
43 MYRAMATH_EXPORT Expression<2,NumberC> cos (const Expression<2,NumberC>& A);
44 MYRAMATH_EXPORT Expression<2,NumberZ> cos (const Expression<2,NumberZ>& A);
46 
48 MYRAMATH_EXPORT Expression<1,NumberS> tan (const Expression<1,NumberS>& A);
50 MYRAMATH_EXPORT Expression<1,NumberD> tan (const Expression<1,NumberD>& A);
51 MYRAMATH_EXPORT Expression<1,NumberC> tan (const Expression<1,NumberC>& A);
52 MYRAMATH_EXPORT Expression<1,NumberZ> tan (const Expression<1,NumberZ>& A);
53 MYRAMATH_EXPORT Expression<2,NumberS> tan (const Expression<2,NumberS>& A);
54 MYRAMATH_EXPORT Expression<2,NumberD> tan (const Expression<2,NumberD>& A);
55 MYRAMATH_EXPORT Expression<2,NumberC> tan (const Expression<2,NumberC>& A);
56 MYRAMATH_EXPORT Expression<2,NumberZ> tan (const Expression<2,NumberZ>& A);
58 
60 MYRAMATH_EXPORT Expression<1,NumberS> asin (const Expression<1,NumberS>& A);
62 MYRAMATH_EXPORT Expression<1,NumberD> asin (const Expression<1,NumberD>& A);
63 MYRAMATH_EXPORT Expression<1,NumberC> asin (const Expression<1,NumberC>& A);
64 MYRAMATH_EXPORT Expression<1,NumberZ> asin (const Expression<1,NumberZ>& A);
65 MYRAMATH_EXPORT Expression<2,NumberS> asin (const Expression<2,NumberS>& A);
66 MYRAMATH_EXPORT Expression<2,NumberD> asin (const Expression<2,NumberD>& A);
67 MYRAMATH_EXPORT Expression<2,NumberC> asin (const Expression<2,NumberC>& A);
68 MYRAMATH_EXPORT Expression<2,NumberZ> asin (const Expression<2,NumberZ>& A);
70 
72 MYRAMATH_EXPORT Expression<1,NumberS> acos (const Expression<1,NumberS>& A);
74 MYRAMATH_EXPORT Expression<1,NumberD> acos (const Expression<1,NumberD>& A);
75 MYRAMATH_EXPORT Expression<1,NumberC> acos (const Expression<1,NumberC>& A);
76 MYRAMATH_EXPORT Expression<1,NumberZ> acos (const Expression<1,NumberZ>& A);
77 MYRAMATH_EXPORT Expression<2,NumberS> acos (const Expression<2,NumberS>& A);
78 MYRAMATH_EXPORT Expression<2,NumberD> acos (const Expression<2,NumberD>& A);
79 MYRAMATH_EXPORT Expression<2,NumberC> acos (const Expression<2,NumberC>& A);
80 MYRAMATH_EXPORT Expression<2,NumberZ> acos (const Expression<2,NumberZ>& A);
82 
84 MYRAMATH_EXPORT Expression<1,NumberS> atan (const Expression<1,NumberS>& A);
86 MYRAMATH_EXPORT Expression<1,NumberD> atan (const Expression<1,NumberD>& A);
87 MYRAMATH_EXPORT Expression<1,NumberC> atan (const Expression<1,NumberC>& A);
88 MYRAMATH_EXPORT Expression<1,NumberZ> atan (const Expression<1,NumberZ>& A);
89 MYRAMATH_EXPORT Expression<2,NumberS> atan (const Expression<2,NumberS>& A);
90 MYRAMATH_EXPORT Expression<2,NumberD> atan (const Expression<2,NumberD>& A);
91 MYRAMATH_EXPORT Expression<2,NumberC> atan (const Expression<2,NumberC>& A);
92 MYRAMATH_EXPORT Expression<2,NumberZ> atan (const Expression<2,NumberZ>& A);
94 
96 MYRAMATH_EXPORT Expression<1,NumberS> atan2 (const Expression<1,NumberS>& Y, const Expression<1,NumberS>& X);
98 MYRAMATH_EXPORT Expression<1,NumberD> atan2 (const Expression<1,NumberD>& Y, const Expression<1,NumberD>& X);
99 MYRAMATH_EXPORT Expression<2,NumberS> atan2 (const Expression<2,NumberS>& Y, const Expression<2,NumberS>& X);
100 MYRAMATH_EXPORT Expression<2,NumberD> atan2 (const Expression<2,NumberD>& Y, const Expression<2,NumberD>& X);
102 
103 // ------------------------------------ Exponentiation functions functions (exp, log, log10)
104 
106 MYRAMATH_EXPORT Expression<1,NumberS> exp (const Expression<1,NumberS>& A);
108 MYRAMATH_EXPORT Expression<1,NumberD> exp (const Expression<1,NumberD>& A);
109 MYRAMATH_EXPORT Expression<1,NumberC> exp (const Expression<1,NumberC>& A);
110 MYRAMATH_EXPORT Expression<1,NumberZ> exp (const Expression<1,NumberZ>& A);
111 MYRAMATH_EXPORT Expression<2,NumberS> exp (const Expression<2,NumberS>& A);
112 MYRAMATH_EXPORT Expression<2,NumberD> exp (const Expression<2,NumberD>& A);
113 MYRAMATH_EXPORT Expression<2,NumberC> exp (const Expression<2,NumberC>& A);
114 MYRAMATH_EXPORT Expression<2,NumberZ> exp (const Expression<2,NumberZ>& A);
116 
118 MYRAMATH_EXPORT Expression<1,NumberS> log (const Expression<1,NumberS>& A);
120 MYRAMATH_EXPORT Expression<1,NumberD> log (const Expression<1,NumberD>& A);
121 MYRAMATH_EXPORT Expression<1,NumberC> log (const Expression<1,NumberC>& A);
122 MYRAMATH_EXPORT Expression<1,NumberZ> log (const Expression<1,NumberZ>& A);
123 MYRAMATH_EXPORT Expression<2,NumberS> log (const Expression<2,NumberS>& A);
124 MYRAMATH_EXPORT Expression<2,NumberD> log (const Expression<2,NumberD>& A);
125 MYRAMATH_EXPORT Expression<2,NumberC> log (const Expression<2,NumberC>& A);
126 MYRAMATH_EXPORT Expression<2,NumberZ> log (const Expression<2,NumberZ>& A);
128 
130 MYRAMATH_EXPORT Expression<1,NumberS> log10 (const Expression<1,NumberS>& A);
132 MYRAMATH_EXPORT Expression<1,NumberD> log10 (const Expression<1,NumberD>& A);
133 MYRAMATH_EXPORT Expression<1,NumberC> log10 (const Expression<1,NumberC>& A);
134 MYRAMATH_EXPORT Expression<1,NumberZ> log10 (const Expression<1,NumberZ>& A);
135 MYRAMATH_EXPORT Expression<2,NumberS> log10 (const Expression<2,NumberS>& A);
136 MYRAMATH_EXPORT Expression<2,NumberD> log10 (const Expression<2,NumberD>& A);
137 MYRAMATH_EXPORT Expression<2,NumberC> log10 (const Expression<2,NumberC>& A);
138 MYRAMATH_EXPORT Expression<2,NumberZ> log10 (const Expression<2,NumberZ>& A);
140 
141 // ------------------------------------ Power functions (sqrt, pow)
142 
144 MYRAMATH_EXPORT Expression<1,NumberS> sqrt (const Expression<1,NumberS>& A);
146 MYRAMATH_EXPORT Expression<1,NumberD> sqrt (const Expression<1,NumberD>& A);
147 MYRAMATH_EXPORT Expression<1,NumberC> sqrt (const Expression<1,NumberC>& A);
148 MYRAMATH_EXPORT Expression<1,NumberZ> sqrt (const Expression<1,NumberZ>& A);
149 MYRAMATH_EXPORT Expression<2,NumberS> sqrt (const Expression<2,NumberS>& A);
150 MYRAMATH_EXPORT Expression<2,NumberD> sqrt (const Expression<2,NumberD>& A);
151 MYRAMATH_EXPORT Expression<2,NumberC> sqrt (const Expression<2,NumberC>& A);
152 MYRAMATH_EXPORT Expression<2,NumberZ> sqrt (const Expression<2,NumberZ>& A);
154 
156 MYRAMATH_EXPORT Expression<1,NumberS> pow (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
158 MYRAMATH_EXPORT Expression<1,NumberD> pow (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
159 MYRAMATH_EXPORT Expression<1,NumberC> pow (const Expression<1,NumberC>& A, const Expression<1,NumberC>& B);
160 MYRAMATH_EXPORT Expression<1,NumberZ> pow (const Expression<1,NumberZ>& A, const Expression<1,NumberZ>& B);
161 MYRAMATH_EXPORT Expression<2,NumberS> pow (const Expression<2,NumberS>& A, const Expression<2,NumberS>& B);
162 MYRAMATH_EXPORT Expression<2,NumberD> pow (const Expression<2,NumberD>& A, const Expression<2,NumberD>& B);
163 MYRAMATH_EXPORT Expression<2,NumberC> pow (const Expression<2,NumberC>& A, const Expression<2,NumberC>& B);
164 MYRAMATH_EXPORT Expression<2,NumberZ> pow (const Expression<2,NumberZ>& A, const Expression<2,NumberZ>& B);
166 
168 MYRAMATH_EXPORT Expression<1,NumberS> pow (const Expression<1,NumberS>& A, NumberS b);
170 MYRAMATH_EXPORT Expression<1,NumberD> pow (const Expression<1,NumberD>& A, NumberD b);
171 MYRAMATH_EXPORT Expression<1,NumberC> pow (const Expression<1,NumberC>& A, NumberC b);
172 MYRAMATH_EXPORT Expression<1,NumberZ> pow (const Expression<1,NumberZ>& A, NumberZ b);
173 MYRAMATH_EXPORT Expression<2,NumberS> pow (const Expression<2,NumberS>& A, NumberS b);
174 MYRAMATH_EXPORT Expression<2,NumberD> pow (const Expression<2,NumberD>& A, NumberD b);
175 MYRAMATH_EXPORT Expression<2,NumberC> pow (const Expression<2,NumberC>& A, NumberC b);
176 MYRAMATH_EXPORT Expression<2,NumberZ> pow (const Expression<2,NumberZ>& A, NumberZ b);
178 
180 MYRAMATH_EXPORT Expression<1,NumberS> pow (NumberS a, const Expression<1,NumberS>& B);
182 MYRAMATH_EXPORT Expression<1,NumberD> pow (NumberD a, const Expression<1,NumberD>& B);
183 MYRAMATH_EXPORT Expression<1,NumberC> pow (NumberC a, const Expression<1,NumberC>& B);
184 MYRAMATH_EXPORT Expression<1,NumberZ> pow (NumberZ a, const Expression<1,NumberZ>& B);
185 MYRAMATH_EXPORT Expression<2,NumberS> pow (NumberS a, const Expression<2,NumberS>& B);
186 MYRAMATH_EXPORT Expression<2,NumberD> pow (NumberD a, const Expression<2,NumberD>& B);
187 MYRAMATH_EXPORT Expression<2,NumberC> pow (NumberC a, const Expression<2,NumberC>& B);
188 MYRAMATH_EXPORT Expression<2,NumberZ> pow (NumberZ a, const Expression<2,NumberZ>& B);
190 
191 // ------------------------------------ Complex value manipulation (conjugate, argument, realpart, imagpart, make_complex)
192 
194 // Overloaded for real cases, too.
196 MYRAMATH_EXPORT Expression<1,NumberS> conjugate (const Expression<1,NumberS>& A);
197 MYRAMATH_EXPORT Expression<1,NumberD> conjugate (const Expression<1,NumberD>& A);
198 MYRAMATH_EXPORT Expression<1,NumberC> conjugate (const Expression<1,NumberC>& A);
199 MYRAMATH_EXPORT Expression<1,NumberZ> conjugate (const Expression<1,NumberZ>& A);
200 MYRAMATH_EXPORT Expression<2,NumberS> conjugate (const Expression<2,NumberS>& A);
201 MYRAMATH_EXPORT Expression<2,NumberD> conjugate (const Expression<2,NumberD>& A);
202 MYRAMATH_EXPORT Expression<2,NumberC> conjugate (const Expression<2,NumberC>& A);
203 MYRAMATH_EXPORT Expression<2,NumberZ> conjugate (const Expression<2,NumberZ>& A);
205 
207 MYRAMATH_EXPORT Expression<1,NumberS> argument (const Expression<1,NumberC>& A);
209 MYRAMATH_EXPORT Expression<1,NumberD> argument (const Expression<1,NumberZ>& A);
210 MYRAMATH_EXPORT Expression<2,NumberS> argument (const Expression<2,NumberC>& A);
211 MYRAMATH_EXPORT Expression<2,NumberD> argument (const Expression<2,NumberZ>& A);
213 
215 MYRAMATH_EXPORT Expression<1,NumberS> realpart (const Expression<1,NumberC>& A);
217 MYRAMATH_EXPORT Expression<1,NumberD> realpart (const Expression<1,NumberZ>& A);
218 MYRAMATH_EXPORT Expression<2,NumberS> realpart (const Expression<2,NumberC>& A);
219 MYRAMATH_EXPORT Expression<2,NumberD> realpart (const Expression<2,NumberZ>& A);
221 
223 MYRAMATH_EXPORT Expression<1,NumberS> imagpart (const Expression<1,NumberC>& A);
225 MYRAMATH_EXPORT Expression<1,NumberD> imagpart (const Expression<1,NumberZ>& A);
226 MYRAMATH_EXPORT Expression<2,NumberS> imagpart (const Expression<2,NumberC>& A);
227 MYRAMATH_EXPORT Expression<2,NumberD> imagpart (const Expression<2,NumberZ>& A);
229 
231 MYRAMATH_EXPORT Expression<1,NumberC> make_complex (const Expression<1,NumberS>& A);
233 MYRAMATH_EXPORT Expression<1,NumberZ> make_complex (const Expression<1,NumberD>& A);
234 MYRAMATH_EXPORT Expression<2,NumberC> make_complex (const Expression<2,NumberS>& A);
235 MYRAMATH_EXPORT Expression<2,NumberZ> make_complex (const Expression<2,NumberD>& A);
237 
239 MYRAMATH_EXPORT Expression<1,NumberC> make_complex (const Expression<1,NumberS>& R, const Expression<1,NumberS>& I);
241 MYRAMATH_EXPORT Expression<1,NumberZ> make_complex (const Expression<1,NumberD>& R, const Expression<1,NumberD>& I);
242 MYRAMATH_EXPORT Expression<2,NumberC> make_complex (const Expression<2,NumberS>& R, const Expression<2,NumberS>& I);
243 MYRAMATH_EXPORT Expression<2,NumberZ> make_complex (const Expression<2,NumberD>& R, const Expression<2,NumberD>& I);
245 
246 // ------------------------------------ Functions related to measures (norm1, norm2, abs)
247 
249 MYRAMATH_EXPORT Expression<1,NumberS> abs (const Expression<1,NumberS>& A);
251 MYRAMATH_EXPORT Expression<1,NumberD> abs (const Expression<1,NumberD>& A);
252 MYRAMATH_EXPORT Expression<1,NumberS> abs (const Expression<1,NumberC>& A);
253 MYRAMATH_EXPORT Expression<1,NumberD> abs (const Expression<1,NumberZ>& A);
254 MYRAMATH_EXPORT Expression<2,NumberS> abs (const Expression<2,NumberS>& A);
255 MYRAMATH_EXPORT Expression<2,NumberD> abs (const Expression<2,NumberD>& A);
256 MYRAMATH_EXPORT Expression<2,NumberS> abs (const Expression<2,NumberC>& A);
257 MYRAMATH_EXPORT Expression<2,NumberD> abs (const Expression<2,NumberZ>& A);
259 
261 MYRAMATH_EXPORT Expression<1,NumberS> min (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
263 MYRAMATH_EXPORT Expression<1,NumberD> min (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
264 MYRAMATH_EXPORT Expression<2,NumberS> min (const Expression<2,NumberS>& A, const Expression<2,NumberS>& B);
265 MYRAMATH_EXPORT Expression<2,NumberD> min (const Expression<2,NumberD>& A, const Expression<2,NumberD>& B);
267 
269 MYRAMATH_EXPORT Expression<1,NumberS> max (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
271 MYRAMATH_EXPORT Expression<1,NumberD> max (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
272 MYRAMATH_EXPORT Expression<2,NumberS> max (const Expression<2,NumberS>& A, const Expression<2,NumberS>& B);
273 MYRAMATH_EXPORT Expression<2,NumberD> max (const Expression<2,NumberD>& A, const Expression<2,NumberD>& B);
275 
276 // ------------------------------------ Functions to manipulate precision (raise_precision, lower_precision)
277 
279 MYRAMATH_EXPORT Expression<1,NumberD> raise_precision (const Expression<1,NumberS>& A);
281 MYRAMATH_EXPORT Expression<1,NumberZ> raise_precision (const Expression<1,NumberC>& A);
282 MYRAMATH_EXPORT Expression<2,NumberD> raise_precision (const Expression<2,NumberS>& A);
283 MYRAMATH_EXPORT Expression<2,NumberZ> raise_precision (const Expression<2,NumberC>& A);
285 
287 MYRAMATH_EXPORT Expression<1,NumberS> lower_precision (const Expression<1,NumberD>& A);
289 MYRAMATH_EXPORT Expression<1,NumberC> lower_precision (const Expression<1,NumberZ>& A);
290 MYRAMATH_EXPORT Expression<2,NumberS> lower_precision (const Expression<2,NumberD>& A);
291 MYRAMATH_EXPORT Expression<2,NumberC> lower_precision (const Expression<2,NumberZ>& A);
293 
294 } // namespace myra
295 
296 #endif
Expression< 1, NumberS > min(const Expression< 1, NumberS > &A, const Expression< 1, NumberS > &B)
Returns the smaller of two real Expression&#39;s, min(A(i),B(i))
Definition: functions_measure.cpp:60
Expression< 1, NumberS > abs(const Expression< 1, NumberS > &A)
Returns the std::abs() of an Expression.
Definition: functions_measure.cpp:29
Expression< 1, NumberS > exp(const Expression< 1, NumberS > &A)
Returns the std::exp() of an Expression.
Definition: functions_exponential.cpp:29
Expression< 1, NumberS > pow(const Expression< 1, NumberS > &A, const Expression< 1, NumberS > &B)
Returns A^B, an Expression base raised to an Expression power.
Definition: functions_power.cpp:53
Expression< 1, NumberS > sin(const Expression< 1, NumberS > &A)
Returns the std::sin() of an Expression.
Definition: functions_trig.cpp:30
Expression< 1, NumberS > max(const Expression< 1, NumberS > &A, const Expression< 1, NumberS > &B)
Returns the larger of two real Expression&#39;s, max(A(i),B(i))
Definition: functions_measure.cpp:83
Expression< 1, NumberS > tan(const Expression< 1, NumberS > &A)
Returns the std::tan() of an Expression.
Definition: functions_trig.cpp:90
Expression< 1, NumberS > acos(const Expression< 1, NumberS > &A)
Returns the std::acos() of an Expression.
Definition: functions_trig.cpp:150
Definition: syntax.dox:1
Expression< 1, NumberS > cos(const Expression< 1, NumberS > &A)
Returns the std::cos() of an Expression.
Definition: functions_trig.cpp:60
Various utility functions/classes related to scalar Number types.
Expression< 1, NumberS > atan(const Expression< 1, NumberS > &A)
Returns the std::atan() of an Expression.
Definition: functions_trig.cpp:180
Expression< 1, NumberS > sqrt(const Expression< 1, NumberS > &A)
Returns the std::sqrt() of an Expression.
Definition: functions_power.cpp:30
Expression< 1, NumberS > log10(const Expression< 1, NumberS > &A)
Returns the std::log10() of an Expression.
Definition: functions_exponential.cpp:89
Expression< 1, NumberS > asin(const Expression< 1, NumberS > &A)
Returns the std::asin() of an Expression.
Definition: functions_trig.cpp:120
Expression< 1, NumberS > atan2(const Expression< 1, NumberS > &Y, const Expression< 1, NumberS > &X)
Returns the std::atan2(y,x) of a real Expression.
Definition: functions_trig.cpp:212
Expression< 1, NumberC > make_complex(const Expression< 1, NumberS > &A)
Promotes a real Expression into a complex one.
Definition: functions_complex.cpp:122
Expression< 1, NumberS > log(const Expression< 1, NumberS > &A)
Returns the std::log() of an Expression.
Definition: functions_exponential.cpp:59