Повысить дискретное равномерное распределение

У меня есть множество дистрибутивов, из которых я рисую образцы, 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); 

Политика применяется вообще?

1 ответ

Решение

По полиморфным причинам я использую 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;
  }

Мой вывод заключается в том, что дискретное равномерное распределение не реализовано в этом классе.

Другие вопросы по тегам