fix: quantity construction in random.h fixed

This commit is contained in:
Mateusz Pusz
2023-02-13 18:42:48 +01:00
parent 8e6fb7818b
commit 4e3daf3f02

View File

@@ -93,14 +93,14 @@ struct uniform_int_distribution : public std::uniform_int_distribution<typename
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q a() const { return Q(base::a()); }
Q b() const { return Q(base::b()); }
Q a() const { return base::a() * Q::reference; }
Q b() const { return base::b() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -115,14 +115,14 @@ struct uniform_real_distribution : public std::uniform_real_distribution<typenam
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q a() const { return Q(base::a()); }
Q b() const { return Q(base::b()); }
Q a() const { return base::a() * Q::reference; }
Q b() const { return base::b() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -137,13 +137,13 @@ struct binomial_distribution : public std::binomial_distribution<typename Q::rep
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q t() const { return Q(base::t()); }
Q t() const { return base::t() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -158,13 +158,13 @@ struct negative_binomial_distribution : public std::negative_binomial_distributi
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q k() const { return Q(base::k()); }
Q k() const { return base::k() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -179,11 +179,11 @@ struct geometric_distribution : public std::geometric_distribution<typename Q::r
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -198,11 +198,11 @@ struct poisson_distribution : public std::poisson_distribution<typename Q::rep>
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -217,11 +217,11 @@ struct exponential_distribution : public std::exponential_distribution<typename
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -236,11 +236,11 @@ struct gamma_distribution : public std::gamma_distribution<typename Q::rep> {
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -255,11 +255,11 @@ struct weibull_distribution : public std::weibull_distribution<typename Q::rep>
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -277,10 +277,10 @@ struct extreme_value_distribution : public std::extreme_value_distribution<typen
return Q(base::operator()(g));
}
Q a() const { return Q(base::a()); }
Q a() const { return base::a() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -298,11 +298,11 @@ struct normal_distribution : public std::normal_distribution<typename Q::rep> {
return Q(base::operator()(g));
}
Q mean() const { return Q(base::mean()); }
Q stddev() const { return Q(base::stddev()); }
Q mean() const { return base::mean() * Q::reference; }
Q stddev() const { return base::stddev() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -317,14 +317,14 @@ struct lognormal_distribution : public std::lognormal_distribution<typename Q::r
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q m() const { return Q(base::m()); }
Q s() const { return Q(base::s()); }
Q m() const { return base::m() * Q::reference; }
Q s() const { return base::s() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -339,11 +339,11 @@ struct chi_squared_distribution : public std::chi_squared_distribution<typename
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -358,14 +358,14 @@ struct cauchy_distribution : public std::cauchy_distribution<typename Q::rep> {
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q a() const { return Q(base::a()); }
Q b() const { return Q(base::b()); }
Q a() const { return base::a() * Q::reference; }
Q b() const { return base::b() * Q::reference; }
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -380,11 +380,11 @@ struct fisher_f_distribution : public std::fisher_f_distribution<typename Q::rep
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -399,11 +399,11 @@ struct student_t_distribution : public std::student_t_distribution<typename Q::r
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -430,11 +430,11 @@ struct discrete_distribution : public std::discrete_distribution<typename Q::rep
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -470,14 +470,14 @@ public:
template<typename UnaryOperation>
piecewise_constant_distribution(std::size_t nw, const Q& xmin, const Q& xmax, UnaryOperation fw) :
base(nw, xmin.number(), xmax.number(), [fw](rep val) { return fw(Q(val)); })
base(nw, xmin.number(), xmax.number(), [fw](rep val) { return fw(val * Q::reference); })
{
}
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
std::vector<Q> intervals() const
@@ -486,13 +486,13 @@ public:
std::vector<Q> intervals_qty;
intervals_qty.reserve(intervals_rep.size());
for (const rep& val : intervals_rep) {
intervals_qty.push_back(Q(val));
intervals_qty.push_back(val * Q::reference);
}
return intervals_qty;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
template<Quantity Q>
@@ -528,14 +528,14 @@ public:
template<typename UnaryOperation>
piecewise_linear_distribution(std::size_t nw, const Q& xmin, const Q& xmax, UnaryOperation fw) :
base(nw, xmin.number(), xmax.number(), [fw](rep val) { return fw(Q(val)); })
base(nw, xmin.number(), xmax.number(), [fw](rep val) { return fw(val * Q::reference); })
{
}
template<typename Generator>
Q operator()(Generator& g)
{
return Q(base::operator()(g));
return base::operator()(g) * Q::reference;
}
std::vector<Q> intervals() const
@@ -544,13 +544,13 @@ public:
std::vector<Q> intervals_qty;
intervals_qty.reserve(intervals_rep.size());
for (const rep& val : intervals_rep) {
intervals_qty.push_back(Q(val));
intervals_qty.push_back(val * Q::reference);
}
return intervals_qty;
}
Q min() const { return Q(base::min()); }
Q max() const { return Q(base::max()); }
Q min() const { return base::min() * Q::reference; }
Q max() const { return base::max() * Q::reference; }
};
} // namespace mp_units