8#ifndef DESIGNLAB_AVERAGE_CALCULATOR_H_
9#define DESIGNLAB_AVERAGE_CALCULATOR_H_
22template <typename T, typename = std::enable_if_t<std::is_arithmetic<T>::value>>
29 average_(
std::nullopt),
30 variance_(
std::nullopt),
31 standard_deviation_(
std::nullopt)
39 void AddData(
const T& data,
const bool do_calc =
true)
41 data_.push_back(data);
45 sum_ = sum_.value() + data;
64 average_ = std::nullopt;
65 variance_ = std::nullopt;
66 standard_deviation_ = std::nullopt;
75 average_ = std::nullopt;
76 variance_ = std::nullopt;
77 standard_deviation_ = std::nullopt;
82 average_ = sum_.value() / data_.size();
87 for (
const auto& data : data_)
89 variance_sum += (data - average_.value()) * (data - average_.value());
91 variance_ = variance_sum / data_.size();
94 standard_deviation_ = sqrt(variance_.value());
115 return standard_deviation_;
133 std::vector<T> data_;
134 std::optional<T> sum_;
135 std::optional<T> average_;
136 std::optional<T> variance_;
137 std::optional<T> standard_deviation_;
平均値,分散,標準偏差を求めるテンプレートクラス.
std::optional< T > GetVariance() const
分散を取得する.
void Calculate()
平均値,分散,標準偏差を計算する.
std::optional< T > GetSum() const
データの合計を取得する.
size_t GetDataNum() const
データ数を取得する.
std::optional< T > GetAverage() const
平均値を取得する.
std::optional< T > GetStandardDeviation() const
標準偏差を取得する.
void AddData(const T &data, const bool do_calc=true)
データを追加する. この関数を呼び出すたびに,平均値,分散,標準偏差が再計算される.