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