Setting Policies for Distributions on an Ad Hoc Basis

| Home | Libraries | People | FAQ | More

#### Setting Policies for Distributions on an Ad Hoc Basis

All of the statistical distributions in this library are class templates that accept two template parameters, both with sensible defaults, for example:

    namespace boost{ namespace math{

    template <class RealType = double, class Policy = policies::policy<> >
    class fisher_f_distribution;

    typedef fisher_f_distribution<> fisher_f;

    }}

This policy gets used by all the accessor functions that accept a distribution as an argument, and forwarded to all the functions called by these. So if you use the shorthand-typedef for the distribution, then you get `double` precision arithmetic and all the default policies.

However, say for example we wanted to evaluate the quantile of the binomial distribution at float precision, without internal promotion to double, and with the result rounded to the nearest integer, then here's how it can be done:

    #include <boost/math/distributions/binomial.hpp>

    //
    // Begin by defining a policy type, that gives the
    // behaviour we want:
    //
    using namespace boost::math::policies;
    typedef policy<
       promote_float<false>,
       discrete_quantile<integer_round_nearest>
    > mypolicy;
    //
    // Then define a distribution that uses it:
    //
    typedef boost::math::binomial_distribution<float, mypolicy> mybinom;
    //
    //  And now use it to get the quantile:
    //
    int main()
    {
       std::cout << "quantile is: " <<
          quantile(mybinom(200, 0.25), 0.05) << std::endl;
    }

Which outputs:

    quantile is: 40