11#ifndef CPP_TOOLS_MATH_TOOLS_HPP
12#define CPP_TOOLS_MATH_TOOLS_HPP
31 T result = entries[0];
32 for (
unsigned long i = 1; i < n; i++)
34 if (entries[i] > result) result = entries[i];
44 template <
typename... Ts>
47 constexpr unsigned long size =
sizeof...(args);
48 double entries[size] = {
static_cast<double>(args)...};
63 T result = entries[0];
64 for (
unsigned long i = 1; i < n; i++)
66 if (entries[i] < result) result = entries[i];
76 template <
typename... Ts>
79 constexpr unsigned long size =
sizeof...(args);
80 double entries[size] = {
static_cast<double>(args)...};
96 for (
unsigned long i = 0; i < n; i++)
100 return result/
static_cast<T
>(n);
108 template <
typename... Ts>
111 constexpr unsigned long size =
sizeof...(args);
112 double entries[size] = {
static_cast<double>(args)...};
125 double WeightedAverage(
const double *entries,
const double *weights,
const unsigned long n)
128 double sumOfWeights = 0;
129 for (
unsigned long i = 0; i < n; i++)
131 result += entries[i]*weights[i];
132 sumOfWeights += weights[i];
134 return result/sumOfWeights;
145 template <
typename T>
149 for (
unsigned long i = 0; i < n; i++)
151 result += (average -
static_cast<double>(entries[i]))*
152 (average -
static_cast<double>(entries[i]));
154 return result/sqrt(
static_cast<double>(n*(n - 1)));
162 template <
typename... Ts>
165 constexpr unsigned long size =
sizeof...(args);
166 double entries[size] = {
static_cast<double>(args)...};
178 template <
typename T>
182 for (
unsigned long i = 0; i < n; i++)
184 result +=
static_cast<double>(entries[i]*entries[i]);
196 template<
typename... Ts>
199 constexpr unsigned long size =
sizeof...(args);
200 double entries[size] = {
static_cast<double>(args)...};
212 template <
typename T>
215 T result = entries[0];
216 for (
unsigned long i = 1; i < n; i++)
218 result *= entries[i];
228 template <
typename... Ts>
231 constexpr unsigned long size =
sizeof...(args);
232 double entries[size] = {
static_cast<double>(args)...};
244 template <
typename T>
248 for (
unsigned long i = 0; i < n; i++)
250 prod *= 1. -
static_cast<double>(entries[i]);
260 template <
typename... Ts>
263 constexpr unsigned long size =
sizeof...(args);
264 double entries[size] = {
static_cast<double>(args)...};
276 template <
typename T>
280 for (
unsigned long i = 0; i < n; i++)
282 result +=
static_cast<double>(entries[i]*entries[i]);
284 return sqrt(result/
static_cast<double>(n));
292 template<
typename... Ts>
295 constexpr unsigned long size =
sizeof...(args);
296 double entries[size] = {
static_cast<double>(args)...};