16#ifndef HIGHWAY_HWY_STATS_H_
17#define HIGHWAY_HWY_STATS_H_
38 HWY_ASSERT(T{0} <= bin && bin < static_cast<T>(N));
39 counts_[
static_cast<int32_t
>(bin)]++;
43 for (
size_t i = 0; i < N; ++i) {
48 void Print(
const char* caption) {
49 fprintf(stderr,
"\n%s [%zu]\n", caption, N);
50 size_t last_nonzero = 0;
51 for (
size_t i = N - 1; i < N; --i) {
57 for (
size_t i = 0; i <= last_nonzero; ++i) {
58 fprintf(stderr,
" %zu\n",
counts_[i]);
63 for (
size_t i = 0; i < N; ++i) {
86 const double d = x -
m1_;
87 const double d_div_n = d /
n_;
88 const double d2n1_div_n = d * (
n_ - 1) * d_div_n;
89 const int64_t n_poly =
n_ *
n_ - 3 *
n_ + 3;
91 m4_ += d_div_n * (d_div_n * (d2n1_div_n * n_poly + 6.0 *
m2_) - 4.0 *
m3_);
92 m3_ += d_div_n * (d2n1_div_n * (
n_ - 2) - 3.0 *
m2_);
110 return n_ == 0 ? 0.0 :
m2_ /
static_cast<int>(
n_);
114 if (
n_ == 0)
return 0.0;
115 if (
n_ == 1)
return m2_;
116 return m2_ /
static_cast<int>(
n_ - 1);
122 if (std::abs(
m2_) < 1E-7)
return 0.0;
123 return m3_ * std::sqrt(
static_cast<double>(
n_)) / std::pow(
m2_, 1.5);
127 if (
n_ == 0)
return 0.0;
129 const double r = (
n_ - 1.0) /
n_;
130 return biased * std::pow(r, 1.5);
135 if (std::abs(
m2_) < 1E-7)
return 0.0;
140 if (
n_ == 0)
return 0.0;
142 const double r = (
n_ - 1.0) /
n_;
143 return biased * r * r;
149 double Mu2()
const {
return m2_ /
static_cast<int>(
n_); }
150 double Mu3()
const {
return m3_ /
static_cast<int>(
n_); }
151 double Mu4()
const {
return m4_ /
static_cast<int>(
n_); }
#define HWY_ASSERT(condition)
Definition base.h:237
size_t counts_[N]
Definition stats.h:69
void Notify(T bin)
Definition stats.h:37
Bins()
Definition stats.h:34
void Print(const char *caption)
Definition stats.h:48
void Reset()
Definition stats.h:62
void Assimilate(const Bins< N > &other)
Definition stats.h:42
int64_t Count() const
Definition stats.h:98
std::string ToString(int exclude=0) const
double GeometricMean() const
Definition stats.h:103
double StandardDeviation() const
Definition stats.h:118
Stats()
Definition stats.h:75
double Mean() const
Definition stats.h:107
@ kNoMinMax
Definition stats.h:157
@ kNoGeomean
Definition stats.h:159
@ kNoSkewKurt
Definition stats.h:158
@ kNoMeanSD
Definition stats.h:156
@ kNoCount
Definition stats.h:155
double Variance() const
Definition stats.h:113
void Reset()
Definition stats.h:163
double m1_
Definition stats.h:186
double Mu4() const
Definition stats.h:151
int64_t n_
Definition stats.h:178
float max_
Definition stats.h:181
double Skewness() const
Definition stats.h:126
double Kurtosis() const
Definition stats.h:139
double m4_
Definition stats.h:189
void Assimilate(const Stats &other)
double m3_
Definition stats.h:188
void Notify(const float x)
Definition stats.h:77
float min_
Definition stats.h:180
float Min() const
Definition stats.h:100
double Mu3() const
Definition stats.h:150
double Mu2() const
Definition stats.h:149
double SampleVariance() const
Definition stats.h:109
double product_
Definition stats.h:183
double SampleKurtosis() const
Definition stats.h:134
double m2_
Definition stats.h:187
double SampleSkewness() const
Definition stats.h:121
double Mu1() const
Definition stats.h:148
float Max() const
Definition stats.h:101
HWY_INLINE HWY_BITCASTSCALAR_CONSTEXPR float LowestValue< float >()
Definition base.h:2203
HWY_INLINE HWY_BITCASTSCALAR_CONSTEXPR float HighestValue< float >()
Definition base.h:2224