Использование пустых аккумуляторов повышения

#c #boost #boost-accumulators

#c #повышение #наддув-аккумуляторы #boost-аккумуляторы

Вопрос:

Мне любопытно, какое среднее значение получается из этого фрагмента кода? Аккумулятор должен быть пустым.

 boost::accumulators::accumulator_set<
    int,
    boost::accumulators::features<boost::accumulators::tag::mean>
> Accumulator;

int Mean = boost::accumulators::mean(Accumulator);
  

Среднее значение ненулевое, когда я его тестирую. Есть ли какой-нибудь способ определить, что среднее значение было взято для пустого набора данных? Почему результирующее значение для «среднего» не равно нулю?

Я просматривал документацию для библиотеки аккумуляторов, но не смог найти ответа на этот вопрос.

Комментарии:

1. Любое значение было бы допустимым средним значением для пустого набора значений, не так ли?

Ответ №1:

Любое значение будет допустимым средним значением для пустого набора значений. Это x * 0 = 0 справедливо для любого x .

Вы можете добавить count функцию в свой accumulator_set и запросить ее, чтобы узнать, соответствует ли она 0.

Комментарии:

1. Хотя это может (как-то?) Быть математически правильным, я считаю это непрактичным. Разве не должно быть способа отличить «любое значение» от «среднего значения пустого набора»?

2. @Dylan Klomparens: разве добавление count функции для проверки наличия пустого набора не является для вас жизнеспособным решением?

3. ДА. Менее элегантно, чем я бы предпочел.

Ответ №2:

Вам не нужно добавлять функцию подсчета, поскольку накопитель среднего значения основан на накопителях count и sum

из руководства пользователя boost:

среднее значение зависит от суммы и количества аккумуляторов … Результат среднего аккумулятора — это просто результат суммирующего аккумулятора, деленный на результат счетного аккумулятора.

итак, вам просто нужно проверить, что количество больше 0:

 bool isEmpty = boost::accumulators::count(Accumulator) == 0;