22 #ifndef EDSP_STATISTICAL_HARMONIC_MEAN_H 23 #define EDSP_STATISTICAL_HARMONIC_MEAN_H 26 #include <edsp/meta/iterator.hpp> 29 namespace edsp {
namespace statistics {
44 template <
typename ForwardIt>
45 constexpr meta::value_type_t<ForwardIt>
harmonic_mean(ForwardIt first, ForwardIt last) {
46 using input_t = meta::value_type_t<ForwardIt>;
47 const auto predicate = [](
const input_t prev,
const input_t current) {
return prev +
math::inv(current); };
48 const auto acc = std::accumulate(first, last, static_cast<input_t>(0), predicate);
49 return static_cast<input_t
>(
std::distance(first, last)) / acc;
53 #endif // EDSP_STATISTICAL_HARMONIC_MEAN_H constexpr T inv(T x)
Computes the inverse value of the input number.
Definition: numeric.hpp:208
constexpr meta::value_type_t< ForwardIt > harmonic_mean(ForwardIt first, ForwardIt last)
Computes the harmonic mean of the range [first, last)
Definition: harmonic_mean.hpp:45
constexpr T distance(T x, T y) noexcept
Computes the distance between x and y.
Definition: numeric.hpp:328
Definition: amplifier.hpp:29