Ultra 0.9.4
Loading...
Searching...
No Matches
distribution.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_DISTRIBUTION_H)
14#define ULTRA_DISTRIBUTION_H
15
16#include "utility/assert.h"
17#include "utility/log.h"
18#include "utility/misc.h"
19
20#include <algorithm>
21#include <cmath>
22#include <iomanip>
23#include <iosfwd>
24#include <map>
25#include <ranges>
26
27namespace ultra
28{
29
34template<ArithmeticFloatingType T>
35class distribution
36{
37public:
38 distribution() = default;
39
40 void clear();
41
42 void add(T);
44 [[nodiscard]] bool empty() const noexcept;
45 [[nodiscard]] std::size_t size() const noexcept;
46 [[nodiscard]] double entropy() const;
47 [[nodiscard]] T max() const noexcept;
48 [[nodiscard]] T mean() const noexcept;
49 [[nodiscard]] T min() const noexcept;
50 [[nodiscard]] const std::map<T, std::uintmax_t> &seen() const;
51 [[nodiscard]] T standard_deviation() const;
52 [[nodiscard]] T variance() const;
53
54 void merge(const distribution<T> &);
55
56 [[nodiscard]] bool is_valid() const;
57
58 // ---- Serialization ----
59 bool load(std::istream &);
60 bool save(std::ostream &) const;
61
62private:
63 // ---- Private member functions ----
64 void update_variance(T);
65
66 // ---- Private data members ----
67 std::map<T, std::uintmax_t> seen_ {};
68
69 T m2_ {};
70 T m2_comp_ {}; // Kahan compensation
71 T mean_ {};
72 T mean_comp_ {}; // Kahan compensation
73 T max_ {};
74 T min_ {};
75
76 std::size_t size_ {0};
77};
78
80} // namespace ultra
81
82#endif // include guard
void clear()
Definition distribution.h:25
T min() const noexcept
Definition distribution.h:62
T variance() const
Definition distribution.h:82
void add(T)
Definition distribution.h:97
T max() const noexcept
Definition distribution.h:52
std::size_t size() const noexcept
Definition distribution.h:43
bool empty() const noexcept
Definition distribution.h:34
T mean() const noexcept
Definition distribution.h:72
STL namespace.