Все статистические распределения в этой библиотеке являются шаблонами классов, которые принимают два параметра шаблона: реальный тип (плавающий, двойной ...) и политика (как обрабатывать исключительные события), оба с разумными по умолчанию, например:
namespace boost{ namespace math{
template <class RealType = double, class Policy = policies::policy<> >
class fisher_f_distribution;
typedef fisher_f_distribution<> fisher_f;
}}
Эта политика используется всеми вспомогательными функциями, которые принимают распределение в качестве аргумента, и пересылается на все функции, называемые этими функциями. Таким образом, если вы используете шорт-типеф для распределения, вы получаете<double
>точную арифметику и все политики по умолчанию.
Однако, скажем, например, мы хотели оценить квантиль биномиального распределения с точностью поплавка, без внутреннего продвижения, чтобы удвоиться, и с результатом, округленным до.Целое число, и вот как это можно сделать:
#include <boost/math/distributions/binomial.hpp>
using boost::math::binomial_distribution;
using boost::math::policies::policy;
using boost::math::policies::promote_float;
using boost::math::policies::discrete_quantile;
using boost::math::policies::integer_round_nearest;
typedef policy<
promote_float<false>,
discrete_quantile<integer_round_nearest>
> mypolicy;
typedef boost::math::binomial_distribution<float, mypolicy> mybinom;
int main()
{
cout << "quantile(mybinom(200, 0.25), 0.05) is: " <<
quantile(mybinom(200, 0.25), 0.05) << endl;
}
Какие выходы:
quantile is: 40