CppTools
Loading...
Searching...
No Matches
MathTools.hpp
Go to the documentation of this file.
1
11#ifndef CPP_TOOLS_MATH_TOOLS_HPP
12#define CPP_TOOLS_MATH_TOOLS_HPP
13
14#include <vector>
15#include <cmath>
16
18namespace CppTools
19{
28 template <typename T>
29 T MaximumFromCArray(const T *entries, const unsigned long n)
30 {
31 T result = entries[0];
32 for (unsigned long i = 1; i < n; i++)
33 {
34 if (entries[i] > result) result = entries[i];
35 }
36 return result;
37 }
38
44 template <typename... Ts>
45 double Maximum(Ts... args)
46 {
47 constexpr unsigned long size = sizeof...(args);
48 double entries[size] = {static_cast<double>(args)...};
49 return MaximumFromCArray(entries, size);
50 }
51
60 template <typename T>
61 T MinimumFromCArray(const T *entries, const unsigned long n)
62 {
63 T result = entries[0];
64 for (unsigned long i = 1; i < n; i++)
65 {
66 if (entries[i] < result) result = entries[i];
67 }
68 return result;
69 }
70
76 template <typename... Ts>
77 double Minimum(Ts... args)
78 {
79 constexpr unsigned long size = sizeof...(args);
80 double entries[size] = {static_cast<double>(args)...};
81 return MinimumFromCArray(entries, size);
82 }
83
92 template <typename T>
93 T AverageFromCArray(const T *entries, const unsigned long n)
94 {
95 T result = 0;
96 for (unsigned long i = 0; i < n; i++)
97 {
98 result += entries[i];
99 }
100 return result/static_cast<T>(n);
101 }
102
108 template <typename... Ts>
109 double Average(Ts... args)
110 {
111 constexpr unsigned long size = sizeof...(args);
112 double entries[size] = {static_cast<double>(args)...};
113 return AverageFromCArray(entries, size);
114 }
115
125 double WeightedAverage(const double *entries, const double *weights, const unsigned long n)
126 {
127 double result = 0;
128 double sumOfWeights = 0;
129 for (unsigned long i = 0; i < n; i++)
130 {
131 result += entries[i]*weights[i];
132 sumOfWeights += weights[i];
133 }
134 return result/sumOfWeights;
135 }
136
145 template <typename T>
146 double StandardErrorFromCArray(const T *entries, const unsigned long n, const double average)
147 {
148 T result = 0;
149 for (unsigned long i = 0; i < n; i++)
150 {
151 result += (average - static_cast<double>(entries[i]))*
152 (average - static_cast<double>(entries[i]));
153 }
154 return result/sqrt(static_cast<double>(n*(n - 1)));
155 }
156
162 template <typename... Ts>
163 double StandardError(Ts... args)
164 {
165 constexpr unsigned long size = sizeof...(args);
166 double entries[size] = {static_cast<double>(args)...};
167 return StandardErrorFromCArray(entries, size - 1, entries[size - 1]);
168 }
169
178 template <typename T>
179 double UncertaintyPropFromCArray(const T *entries, const unsigned long n)
180 {
181 double result = 0;
182 for (unsigned long i = 0; i < n; i++)
183 {
184 result += static_cast<double>(entries[i]*entries[i]);
185 }
186 return sqrt(result);
187 }
188
196 template<typename... Ts>
197 double UncertaintyProp(Ts... args)
198 {
199 constexpr unsigned long size = sizeof...(args);
200 double entries[size] = {static_cast<double>(args)...};
201 return UncertaintyPropFromCArray(entries, size);
202 }
203
212 template <typename T>
213 T ProductFromCArray(const T *entries, const unsigned long n)
214 {
215 T result = entries[0];
216 for (unsigned long i = 1; i < n; i++)
217 {
218 result *= entries[i];
219 }
220 return result;
221 }
222
228 template <typename... Ts>
229 double Product(Ts... args)
230 {
231 constexpr unsigned long size = sizeof...(args);
232 double entries[size] = {static_cast<double>(args)...};
233 return ProductFromCArray(entries, size);
234 }
235
244 template <typename T>
245 double AtLeast1ProbFromCArray(const T *entries, const unsigned long n)
246 {
247 double prod = 1.;
248 for (unsigned long i = 0; i < n; i++)
249 {
250 prod *= 1. - static_cast<double>(entries[i]);
251 }
252 return 1. - prod;
253 }
254
260 template <typename... Ts>
261 double AtLeast1Prob(Ts... args)
262 {
263 constexpr unsigned long size = sizeof...(args);
264 double entries[size] = {static_cast<double>(args)...};
265 return AtLeast1ProbFromCArray(entries, size);
266 }
267
276 template <typename T>
277 double RMSFromCArray(const T *entries, const unsigned long n)
278 {
279 double result = 0.;
280 for (unsigned long i = 0; i < n; i++)
281 {
282 result += static_cast<double>(entries[i]*entries[i]);
283 }
284 return sqrt(result/static_cast<double>(n));
285 }
286
292 template<typename... Ts>
293 double RMS(Ts... args)
294 {
295 constexpr unsigned long size = sizeof...(args);
296 double entries[size] = {static_cast<double>(args)...};
297 return RMSFromCArray(entries, size);
298 }
299}
300
301#endif /* CPP_TOOLS_MATH_TOOLS_HPP */
double Maximum(Ts... args)
Returns maximum value from parameter pack.
Definition MathTools.hpp:45
double StandardError(Ts... args)
Returns average value from parameter pack.
Definition MathTools.hpp:163
double Average(Ts... args)
Returns average value from parameter pack.
Definition MathTools.hpp:109
double RMS(Ts... args)
Returns root mean square (RMS) of values from parameter pack.
Definition MathTools.hpp:293
T AverageFromCArray(const T *entries, const unsigned long n)
Returns average value from C array.
Definition MathTools.hpp:93
double RMSFromCArray(const T *entries, const unsigned long n)
Returns root mean square (RMS) of values from C array.
Definition MathTools.hpp:277
double WeightedAverage(const double *entries, const double *weights, const unsigned long n)
Returns average value from C arrays containing values and weights.
Definition MathTools.hpp:125
T MinimumFromCArray(const T *entries, const unsigned long n)
Returns minimum value from C array.
Definition MathTools.hpp:61
double Product(Ts... args)
Returns product of values from parameter pack.
Definition MathTools.hpp:229
double AtLeast1ProbFromCArray(const T *entries, const unsigned long n)
Returns probability of at least 1 success from probabilities of different independent successes from ...
Definition MathTools.hpp:245
double Minimum(Ts... args)
Returns minimum value from parameter pack.
Definition MathTools.hpp:77
double UncertaintyPropFromCArray(const T *entries, const unsigned long n)
Returns uncertainty that is the propagated uncertainty from all uncertainties from C array.
Definition MathTools.hpp:179
double AtLeast1Prob(Ts... args)
Returns probability of at least 1 success from probabilities of different independent successes from ...
Definition MathTools.hpp:261
T ProductFromCArray(const T *entries, const unsigned long n)
Returns product of values from C array.
Definition MathTools.hpp:213
T MaximumFromCArray(const T *entries, const unsigned long n)
Returns maximum value from C array.
Definition MathTools.hpp:29
double UncertaintyProp(Ts... args)
Returns uncertainty that is the propagated uncertainty from all uncertainties from parameter pack.
Definition MathTools.hpp:197
double StandardErrorFromCArray(const T *entries, const unsigned long n, const double average)
Returns standard error value from C array.
Definition MathTools.hpp:146