123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- // Copyright John Maddock 2007.
- // Copyright Paul A. Bristow 2010
- // Use, modification and distribution are subject to the
- // Boost Software License, Version 1.0. (See accompanying file
- // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- // Note that this file contains quickbook mark-up as well as code
- // and comments, don't change any of the special comment mark-ups!
- //[policy_eg_10
- /*`
- To understand how the rounding policies for
- the discrete distributions can be used, we'll
- use the 50-sample binomial distribution with a
- success fraction of 0.5 once again, and calculate
- all the possible quantiles at 0.05 and 0.95.
- Begin by including the needed headers (and some using statements for conciseness):
- */
- #include <iostream>
- using std::cout; using std::endl;
- using std::left; using std::fixed; using std::right; using std::scientific;
- #include <iomanip>
- using std::setw;
- using std::setprecision;
- #include <boost/math/distributions/binomial.hpp>
- /*`
- Next we'll bring the needed declarations into scope, and
- define distribution types for all the available rounding policies:
- */
- // Avoid
- // using namespace std; // and
- // using namespace boost::math;
- // to avoid potential ambiguity of names, like binomial.
- // using namespace boost::math::policies; is small risk, but
- // the necessary items are brought into scope thus:
- using boost::math::binomial_distribution;
- using boost::math::policies::policy;
- using boost::math::policies::discrete_quantile;
- using boost::math::policies::integer_round_outwards;
- using boost::math::policies::integer_round_down;
- using boost::math::policies::integer_round_up;
- using boost::math::policies::integer_round_nearest;
- using boost::math::policies::integer_round_inwards;
- using boost::math::policies::real;
- using boost::math::binomial_distribution; // Not std::binomial_distribution.
- typedef binomial_distribution<
- double,
- policy<discrete_quantile<integer_round_outwards> > >
- binom_round_outwards;
- typedef binomial_distribution<
- double,
- policy<discrete_quantile<integer_round_inwards> > >
- binom_round_inwards;
- typedef binomial_distribution<
- double,
- policy<discrete_quantile<integer_round_down> > >
- binom_round_down;
- typedef binomial_distribution<
- double,
- policy<discrete_quantile<integer_round_up> > >
- binom_round_up;
- typedef binomial_distribution<
- double,
- policy<discrete_quantile<integer_round_nearest> > >
- binom_round_nearest;
- typedef binomial_distribution<
- double,
- policy<discrete_quantile<real> > >
- binom_real_quantile;
- /*`
- Now let's set to work calling those quantiles:
- */
- int main()
- {
- cout <<
- "Testing rounding policies for a 50 sample binomial distribution,\n"
- "with a success fraction of 0.5.\n\n"
- "Lower quantiles are calculated at p = 0.05\n\n"
- "Upper quantiles at p = 0.95.\n\n";
- cout << setw(25) << right
- << "Policy"<< setw(18) << right
- << "Lower Quantile" << setw(18) << right
- << "Upper Quantile" << endl;
-
- // Test integer_round_outwards:
- cout << setw(25) << right
- << "integer_round_outwards"
- << setw(18) << right
- << quantile(binom_round_outwards(50, 0.5), 0.05)
- << setw(18) << right
- << quantile(binom_round_outwards(50, 0.5), 0.95)
- << endl;
-
- // Test integer_round_inwards:
- cout << setw(25) << right
- << "integer_round_inwards"
- << setw(18) << right
- << quantile(binom_round_inwards(50, 0.5), 0.05)
- << setw(18) << right
- << quantile(binom_round_inwards(50, 0.5), 0.95)
- << endl;
-
- // Test integer_round_down:
- cout << setw(25) << right
- << "integer_round_down"
- << setw(18) << right
- << quantile(binom_round_down(50, 0.5), 0.05)
- << setw(18) << right
- << quantile(binom_round_down(50, 0.5), 0.95)
- << endl;
-
- // Test integer_round_up:
- cout << setw(25) << right
- << "integer_round_up"
- << setw(18) << right
- << quantile(binom_round_up(50, 0.5), 0.05)
- << setw(18) << right
- << quantile(binom_round_up(50, 0.5), 0.95)
- << endl;
-
- // Test integer_round_nearest:
- cout << setw(25) << right
- << "integer_round_nearest"
- << setw(18) << right
- << quantile(binom_round_nearest(50, 0.5), 0.05)
- << setw(18) << right
- << quantile(binom_round_nearest(50, 0.5), 0.95)
- << endl;
-
- // Test real:
- cout << setw(25) << right
- << "real"
- << setw(18) << right
- << quantile(binom_real_quantile(50, 0.5), 0.05)
- << setw(18) << right
- << quantile(binom_real_quantile(50, 0.5), 0.95)
- << endl;
- } // int main()
- /*`
- Which produces the program output:
- [pre
- policy_eg_10.vcxproj -> J:\Cpp\MathToolkit\test\Math_test\Release\policy_eg_10.exe
- Testing rounding policies for a 50 sample binomial distribution,
- with a success fraction of 0.5.
-
- Lower quantiles are calculated at p = 0.05
-
- Upper quantiles at p = 0.95.
-
- Policy Lower Quantile Upper Quantile
- integer_round_outwards 18 31
- integer_round_inwards 19 30
- integer_round_down 18 30
- integer_round_up 19 31
- integer_round_nearest 19 30
- real 18.701 30.299
- ]
- */
- //] //[policy_eg_10] ends quickbook import.
|