...one of the most highly
regarded and expertly designed C++ library projects in the
world.

— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards

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