У меня есть множество дистрибутивов, из которых я рисую образцы, pdf и cdf. По полиморфным причинам я используюiform_distribution вместоiform_int_distribution.
Следующее возвращает мне плавающее значение от 10 до 20 вместо целых значений:
typedef uniform_distribution<double,
policy<discrete_quantile<integer_round_outwards>>> uniform_round_outwards;
uniform_round_outwards _uniformObject(10,20);
x = quantile(_uniformObject, p);
Политика применяется вообще?
По полиморфным причинам я использую
uniform_distribution
вместоuniform_int_distribution
,
Библиотека Math не имеет uniform_int_distribution
, делая это странное заявление.
Следующее возвращает мне плавающее значение от 10 до 20 вместо целых значений:
Это распределение является непрерывным распределением. Документы только мимолетно ссылаются на Википедию, чтобы сказать: «Существует также дискретное равномерное распределение», но они не могут явно указать, реализована ли такая вещь или нет.
Изучение источника показывает, что политика не используется:
template <class RealType, class Policy>
inline RealType quantile(const uniform_distribution<RealType, Policy>& dist, const RealType& p)
{
RealType lower = dist.lower();
RealType upper = dist.upper();
RealType result = 0; // of checks
if(false == detail::check_uniform("boost::math::quantile(const uniform_distribution<%1%>&, %1%)",lower, upper, &result, Policy()))
{
return result;
}
if(false == detail::check_probability("boost::math::quantile(const uniform_distribution<%1%>&, %1%)", p, &result, Policy()))
{
return result;
}
if(p == 0)
{
return lower;
}
if(p == 1)
{
return upper;
}
return p * (upper - lower) + lower;
}
Мой вывод заключается в том, что дискретное равномерное распределение не реализовано в этом классе.
Других решений пока нет …