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