123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566 |
- // normal_misc_examples.cpp
- // Copyright Paul A. Bristow 2007, 2010, 2014, 2016.
- // 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)
- // Example of using normal distribution.
- // Note that this file contains Quickbook mark-up as well as code
- // and comments, don't change any of the special comment mark-ups!
- /*`
- First we need some includes to access the normal distribution
- (and some std output of course).
- */
- #include <boost/cstdfloat.hpp> // MUST be first include!!!
- // See Implementation of Float128 type, Overloading template functions with float128_t.
- #include <boost/math/distributions/normal.hpp> // for normal_distribution.
- using boost::math::normal; // typedef provides default type of double.
- #include <iostream>
- //using std::cout; using std::endl;
- //using std::left; using std::showpoint; using std::noshowpoint;
- #include <iomanip>
- //using std::setw; using std::setprecision;
- #include <limits>
- //using std::numeric_limits;
- /*!
- Function max_digits10
- Returns maximum number of possibly significant decimal digits for a floating-point type FPT,
- even for older compilers/standard libraries that
- lack support for std::std::numeric_limits<FPT>::max_digits10,
- when the Kahan formula 2 + binary_digits * 0.3010 is used instead.
- Also provides the correct result for Visual Studio 2010 where the max_digits10 provided for float is wrong.
- */
- namespace boost
- {
- namespace math
- {
- template <typename FPT>
- int max_digits10()
- {
- // Since max_digits10 is not defined (or wrong) on older systems, define a local max_digits10.
- // Usage: int m = max_digits10<boost::float64_t>();
- const int m =
- #if (defined BOOST_NO_CXX11_NUMERIC_LIMITS) || (_MSC_VER == 1600) // is wrongly 8 not 9 for VS2010.
- 2 + std::numeric_limits<FPT>::digits * 3010/10000;
- #else
- std::numeric_limits<FPT>::max_digits10;
- #endif
- return m;
- }
- } // namespace math
- } // namespace boost
- template <typename FPT>
- void normal_table()
- {
- using namespace boost::math;
- FPT step = static_cast<FPT>(1.); // step in z.
- FPT range = static_cast<FPT>(10.); // min and max z = -range to +range.
- // Traditional tables are only computed to much lower precision.
- // but @c std::std::numeric_limits<double>::max_digits10;
- // on new Standard Libraries gives 17,
- // the maximum number of digits from 64-bit double that can possibly be significant.
- // @c std::std::numeric_limits<double>::digits10; == 15
- // is number of @b guaranteed digits, the other two digits being 'noisy'.
- // Here we use a custom version of max_digits10 which deals with those platforms
- // where @c std::numeric_limits is not specialized,
- // or @c std::numeric_limits<>::max_digits10 not implemented, or wrong.
- int precision = boost::math::max_digits10<FPT>();
- // std::cout << typeid(FPT).name() << std::endl;
- // demo_normal.cpp:85: undefined reference to `typeinfo for __float128'
- // [@http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43622 GCC 43622]
- // typeinfo for __float128 was missing GCC 4.9 Mar 2014, but OK for GCC 6.1.1.
- // Construct a standard normal distribution s, with
- // (default mean = zero, and standard deviation = unity)
- normal s;
- std::cout << "\nStandard normal distribution, mean = "<< s.mean()
- << ", standard deviation = " << s.standard_deviation() << std::endl;
- std::cout << "maxdigits_10 is " << precision
- << ", digits10 is " << std::numeric_limits<FPT>::digits10 << std::endl;
- std::cout << "Probability distribution function values" << std::endl;
- std::cout << " z " " PDF " << std::endl;
- for (FPT z = -range; z < range + step; z += step)
- {
- std::cout << std::left << std::setprecision(3) << std::setw(6) << z << " "
- << std::setprecision(precision) << std::setw(12) << pdf(s, z) << std::endl;
- }
- std::cout.precision(6); // Restore to default precision.
- /*`And the area under the normal curve from -[infin] up to z,
- the cumulative distribution function (CDF).
- */
- // For a standard normal distribution:
- std::cout << "Standard normal mean = "<< s.mean()
- << ", standard deviation = " << s.standard_deviation() << std::endl;
- std::cout << "Integral (area under the curve) from - infinity up to z." << std::endl;
- std::cout << " z " " CDF " << std::endl;
- for (FPT z = -range; z < range + step; z += step)
- {
- std::cout << std::left << std::setprecision(3) << std::setw(6) << z << " "
- << std::setprecision(precision) << std::setw(12) << cdf(s, z) << std::endl;
- }
- std::cout.precision(6); // Reset to default precision.
- } // template <typename FPT> void normal_table()
- int main()
- {
- std::cout << "\nExample: Normal distribution tables." << std::endl;
- using namespace boost::math;
- try
- {// Tip - always use try'n'catch blocks to ensure that messages from thrown exceptions are shown.
- //[normal_table_1
- #ifdef BOOST_FLOAT32_C
- normal_table<boost::float32_t>(); // Usually type float
- #endif
- normal_table<boost::float64_t>(); // Usually type double. Assume that float64_t is always available.
- #ifdef BOOST_FLOAT80_C
- normal_table<boost::float80_t>(); // Type long double on some X86 platforms.
- #endif
- #ifdef BOOST_FLOAT128_C
- normal_table<boost::float128_t>(); // Type _Quad on some Intel and __float128 on some GCC platforms.
- #endif
- normal_table<boost::floatmax_t>();
- //] [/normal_table_1 ]
- }
- catch(std::exception ex)
- {
- std::cout << "exception thrown " << ex.what() << std::endl;
- }
- return 0;
- } // int main()
- /*
- GCC 4.8.1 with quadmath
- Example: Normal distribution tables.
- Standard normal distribution, mean = 0, standard deviation = 1
- maxdigits_10 is 9, digits10 is 6
- Probability distribution function values
- z PDF
- -10 7.69459863e-023
- -9 1.02797736e-018
- -8 5.05227108e-015
- -7 9.13472041e-012
- -6 6.07588285e-009
- -5 1.48671951e-006
- -4 0.000133830226
- -3 0.00443184841
- -2 0.0539909665
- -1 0.241970725
- 0 0.39894228
- 1 0.241970725
- 2 0.0539909665
- 3 0.00443184841
- 4 0.000133830226
- 5 1.48671951e-006
- 6 6.07588285e-009
- 7 9.13472041e-012
- 8 5.05227108e-015
- 9 1.02797736e-018
- 10 7.69459863e-023
- Standard normal mean = 0, standard deviation = 1
- Integral (area under the curve) from - infinity up to z.
- z CDF
- -10 7.61985302e-024
- -9 1.12858841e-019
- -8 6.22096057e-016
- -7 1.27981254e-012
- -6 9.86587645e-010
- -5 2.86651572e-007
- -4 3.16712418e-005
- -3 0.00134989803
- -2 0.0227501319
- -1 0.158655254
- 0 0.5
- 1 0.841344746
- 2 0.977249868
- 3 0.998650102
- 4 0.999968329
- 5 0.999999713
- 6 0.999999999
- 7 1
- 8 1
- 9 1
- 10 1
- Standard normal distribution, mean = 0, standard deviation = 1
- maxdigits_10 is 17, digits10 is 15
- Probability distribution function values
- z PDF
- -10 7.6945986267064199e-023
- -9 1.0279773571668917e-018
- -8 5.0522710835368927e-015
- -7 9.1347204083645953e-012
- -6 6.0758828498232861e-009
- -5 1.4867195147342979e-006
- -4 0.00013383022576488537
- -3 0.0044318484119380075
- -2 0.053990966513188063
- -1 0.24197072451914337
- 0 0.3989422804014327
- 1 0.24197072451914337
- 2 0.053990966513188063
- 3 0.0044318484119380075
- 4 0.00013383022576488537
- 5 1.4867195147342979e-006
- 6 6.0758828498232861e-009
- 7 9.1347204083645953e-012
- 8 5.0522710835368927e-015
- 9 1.0279773571668917e-018
- 10 7.6945986267064199e-023
- Standard normal mean = 0, standard deviation = 1
- Integral (area under the curve) from - infinity up to z.
- z CDF
- -10 7.6198530241605945e-024
- -9 1.1285884059538422e-019
- -8 6.2209605742718204e-016
- -7 1.279812543885835e-012
- -6 9.865876450377014e-010
- -5 2.8665157187919455e-007
- -4 3.1671241833119972e-005
- -3 0.0013498980316300957
- -2 0.022750131948179216
- -1 0.15865525393145705
- 0 0.5
- 1 0.84134474606854293
- 2 0.97724986805182079
- 3 0.9986501019683699
- 4 0.99996832875816688
- 5 0.99999971334842808
- 6 0.9999999990134123
- 7 0.99999999999872013
- 8 0.99999999999999933
- 9 1
- 10 1
- Standard normal distribution, mean = 0, standard deviation = 1
- maxdigits_10 is 21, digits10 is 18
- Probability distribution function values
- z PDF
- -10 7.69459862670641993759e-023
- -9 1.0279773571668916523e-018
- -8 5.05227108353689273243e-015
- -7 9.13472040836459525705e-012
- -6 6.07588284982328608733e-009
- -5 1.48671951473429788965e-006
- -4 0.00013383022576488536764
- -3 0.00443184841193800752729
- -2 0.0539909665131880628364
- -1 0.241970724519143365328
- 0 0.398942280401432702863
- 1 0.241970724519143365328
- 2 0.0539909665131880628364
- 3 0.00443184841193800752729
- 4 0.00013383022576488536764
- 5 1.48671951473429788965e-006
- 6 6.07588284982328608733e-009
- 7 9.13472040836459525705e-012
- 8 5.05227108353689273243e-015
- 9 1.0279773571668916523e-018
- 10 7.69459862670641993759e-023
- Standard normal mean = 0, standard deviation = 1
- Integral (area under the curve) from - infinity up to z.
- z CDF
- -10 7.61985302416059451083e-024
- -9 1.12858840595384222719e-019
- -8 6.22096057427182035917e-016
- -7 1.279812543885834962e-012
- -6 9.86587645037701399241e-010
- -5 2.86651571879194547129e-007
- -4 3.16712418331199717608e-005
- -3 0.00134989803163009566139
- -2 0.0227501319481792155242
- -1 0.158655253931457046468
- 0 0.5
- 1 0.841344746068542925777
- 2 0.977249868051820791415
- 3 0.998650101968369896532
- 4 0.999968328758166880021
- 5 0.999999713348428076465
- 6 0.999999999013412299576
- 7 0.999999999998720134897
- 8 0.999999999999999333866
- 9 1
- 10 1
- Standard normal distribution, mean = 0, standard deviation = 1
- maxdigits_10 is 36, digits10 is 34
- Probability distribution function values
- z PDF
- -10 7.69459862670641993759264402330435296e-023
- -9 1.02797735716689165230378750485667109e-018
- -8 5.0522710835368927324337437844893081e-015
- -7 9.13472040836459525705208369548147081e-012
- -6 6.07588284982328608733411870229841611e-009
- -5 1.48671951473429788965346931561839483e-006
- -4 0.00013383022576488536764006964663309418
- -3 0.00443184841193800752728870762098267733
- -2 0.0539909665131880628363703067407186609
- -1 0.241970724519143365327522587904240936
- 0 0.398942280401432702863218082711682655
- 1 0.241970724519143365327522587904240936
- 2 0.0539909665131880628363703067407186609
- 3 0.00443184841193800752728870762098267733
- 4 0.00013383022576488536764006964663309418
- 5 1.48671951473429788965346931561839483e-006
- 6 6.07588284982328608733411870229841611e-009
- 7 9.13472040836459525705208369548147081e-012
- 8 5.0522710835368927324337437844893081e-015
- 9 1.02797735716689165230378750485667109e-018
- 10 7.69459862670641993759264402330435296e-023
- Standard normal mean = 0, standard deviation = 1
- Integral (area under the curve) from - infinity up to z.
- z CDF
- -10 7.61985302416059451083278826816793623e-024
- -9 1.1285884059538422271881384555435713e-019
- -8 6.22096057427182035917417257601387863e-016
- -7 1.27981254388583496200054074948511201e-012
- -6 9.86587645037701399241244820583623953e-010
- -5 2.86651571879194547128505464808623238e-007
- -4 3.16712418331199717608064048146587766e-005
- -3 0.001349898031630095661392854111682027
- -2 0.0227501319481792155241528519127314212
- -1 0.158655253931457046467912164189328905
- 0 0.5
- 1 0.841344746068542925776512220181757584
- 2 0.977249868051820791414741051994496956
- 3 0.998650101968369896532351503992686048
- 4 0.999968328758166880021462930017150939
- 5 0.999999713348428076464813329948810861
- 6 0.999999999013412299575520592043176293
- 7 0.999999999998720134897212119540199637
- 8 0.999999999999999333866185224906075746
- 9 1
- 10 1
- Standard normal distribution, mean = 0, standard deviation = 1
- maxdigits_10 is 36, digits10 is 34
- Probability distribution function values
- z PDF
- -10 7.69459862670641993759264402330435296e-023
- -9 1.02797735716689165230378750485667109e-018
- -8 5.0522710835368927324337437844893081e-015
- -7 9.13472040836459525705208369548147081e-012
- -6 6.07588284982328608733411870229841611e-009
- -5 1.48671951473429788965346931561839483e-006
- -4 0.00013383022576488536764006964663309418
- -3 0.00443184841193800752728870762098267733
- -2 0.0539909665131880628363703067407186609
- -1 0.241970724519143365327522587904240936
- 0 0.398942280401432702863218082711682655
- 1 0.241970724519143365327522587904240936
- 2 0.0539909665131880628363703067407186609
- 3 0.00443184841193800752728870762098267733
- 4 0.00013383022576488536764006964663309418
- 5 1.48671951473429788965346931561839483e-006
- 6 6.07588284982328608733411870229841611e-009
- 7 9.13472040836459525705208369548147081e-012
- 8 5.0522710835368927324337437844893081e-015
- 9 1.02797735716689165230378750485667109e-018
- 10 7.69459862670641993759264402330435296e-023
- Standard normal mean = 0, standard deviation = 1
- Integral (area under the curve) from - infinity up to z.
- z CDF
- -10 7.61985302416059451083278826816793623e-024
- -9 1.1285884059538422271881384555435713e-019
- -8 6.22096057427182035917417257601387863e-016
- -7 1.27981254388583496200054074948511201e-012
- -6 9.86587645037701399241244820583623953e-010
- -5 2.86651571879194547128505464808623238e-007
- -4 3.16712418331199717608064048146587766e-005
- -3 0.001349898031630095661392854111682027
- -2 0.0227501319481792155241528519127314212
- -1 0.158655253931457046467912164189328905
- 0 0.5
- 1 0.841344746068542925776512220181757584
- 2 0.977249868051820791414741051994496956
- 3 0.998650101968369896532351503992686048
- 4 0.999968328758166880021462930017150939
- 5 0.999999713348428076464813329948810861
- 6 0.999999999013412299575520592043176293
- 7 0.999999999998720134897212119540199637
- 8 0.999999999999999333866185224906075746
- 9 1
- 10 1
- MSVC 2013 64-bit
- 1>
- 1> Example: Normal distribution tables.
- 1>
- 1> Standard normal distribution, mean = 0, standard deviation = 1
- 1> maxdigits_10 is 9, digits10 is 6
- 1> Probability distribution function values
- 1> z PDF
- 1> -10 7.69459863e-023
- 1> -9 1.02797736e-018
- 1> -8 5.05227108e-015
- 1> -7 9.13472041e-012
- 1> -6 6.07588285e-009
- 1> -5 1.48671951e-006
- 1> -4 0.000133830226
- 1> -3 0.00443184841
- 1> -2 0.0539909665
- 1> -1 0.241970725
- 1> 0 0.39894228
- 1> 1 0.241970725
- 1> 2 0.0539909665
- 1> 3 0.00443184841
- 1> 4 0.000133830226
- 1> 5 1.48671951e-006
- 1> 6 6.07588285e-009
- 1> 7 9.13472041e-012
- 1> 8 5.05227108e-015
- 1> 9 1.02797736e-018
- 1> 10 7.69459863e-023
- 1> Standard normal mean = 0, standard deviation = 1
- 1> Integral (area under the curve) from - infinity up to z.
- 1> z CDF
- 1> -10 7.61985302e-024
- 1> -9 1.12858841e-019
- 1> -8 6.22096057e-016
- 1> -7 1.27981254e-012
- 1> -6 9.86587645e-010
- 1> -5 2.86651572e-007
- 1> -4 3.16712418e-005
- 1> -3 0.00134989803
- 1> -2 0.0227501319
- 1> -1 0.158655254
- 1> 0 0.5
- 1> 1 0.841344746
- 1> 2 0.977249868
- 1> 3 0.998650102
- 1> 4 0.999968329
- 1> 5 0.999999713
- 1> 6 0.999999999
- 1> 7 1
- 1> 8 1
- 1> 9 1
- 1> 10 1
- 1>
- 1> Standard normal distribution, mean = 0, standard deviation = 1
- 1> maxdigits_10 is 17, digits10 is 15
- 1> Probability distribution function values
- 1> z PDF
- 1> -10 7.6945986267064199e-023
- 1> -9 1.0279773571668917e-018
- 1> -8 5.0522710835368927e-015
- 1> -7 9.1347204083645953e-012
- 1> -6 6.0758828498232861e-009
- 1> -5 1.4867195147342979e-006
- 1> -4 0.00013383022576488537
- 1> -3 0.0044318484119380075
- 1> -2 0.053990966513188063
- 1> -1 0.24197072451914337
- 1> 0 0.3989422804014327
- 1> 1 0.24197072451914337
- 1> 2 0.053990966513188063
- 1> 3 0.0044318484119380075
- 1> 4 0.00013383022576488537
- 1> 5 1.4867195147342979e-006
- 1> 6 6.0758828498232861e-009
- 1> 7 9.1347204083645953e-012
- 1> 8 5.0522710835368927e-015
- 1> 9 1.0279773571668917e-018
- 1> 10 7.6945986267064199e-023
- 1> Standard normal mean = 0, standard deviation = 1
- 1> Integral (area under the curve) from - infinity up to z.
- 1> z CDF
- 1> -10 7.6198530241605813e-024
- 1> -9 1.1285884059538408e-019
- 1> -8 6.2209605742718292e-016
- 1> -7 1.2798125438858352e-012
- 1> -6 9.8658764503770161e-010
- 1> -5 2.8665157187919439e-007
- 1> -4 3.1671241833119979e-005
- 1> -3 0.0013498980316300957
- 1> -2 0.022750131948179219
- 1> -1 0.15865525393145707
- 1> 0 0.5
- 1> 1 0.84134474606854293
- 1> 2 0.97724986805182079
- 1> 3 0.9986501019683699
- 1> 4 0.99996832875816688
- 1> 5 0.99999971334842808
- 1> 6 0.9999999990134123
- 1> 7 0.99999999999872013
- 1> 8 0.99999999999999933
- 1> 9 1
- 1> 10 1
- 1>
- 1> Standard normal distribution, mean = 0, standard deviation = 1
- 1> maxdigits_10 is 17, digits10 is 15
- 1> Probability distribution function values
- 1> z PDF
- 1> -10 7.6945986267064199e-023
- 1> -9 1.0279773571668917e-018
- 1> -8 5.0522710835368927e-015
- 1> -7 9.1347204083645953e-012
- 1> -6 6.0758828498232861e-009
- 1> -5 1.4867195147342979e-006
- 1> -4 0.00013383022576488537
- 1> -3 0.0044318484119380075
- 1> -2 0.053990966513188063
- 1> -1 0.24197072451914337
- 1> 0 0.3989422804014327
- 1> 1 0.24197072451914337
- 1> 2 0.053990966513188063
- 1> 3 0.0044318484119380075
- 1> 4 0.00013383022576488537
- 1> 5 1.4867195147342979e-006
- 1> 6 6.0758828498232861e-009
- 1> 7 9.1347204083645953e-012
- 1> 8 5.0522710835368927e-015
- 1> 9 1.0279773571668917e-018
- 1> 10 7.6945986267064199e-023
- 1> Standard normal mean = 0, standard deviation = 1
- 1> Integral (area under the curve) from - infinity up to z.
- 1> z CDF
- 1> -10 7.6198530241605813e-024
- 1> -9 1.1285884059538408e-019
- 1> -8 6.2209605742718292e-016
- 1> -7 1.2798125438858352e-012
- 1> -6 9.8658764503770161e-010
- 1> -5 2.8665157187919439e-007
- 1> -4 3.1671241833119979e-005
- 1> -3 0.0013498980316300957
- 1> -2 0.022750131948179219
- 1> -1 0.15865525393145707
- 1> 0 0.5
- 1> 1 0.84134474606854293
- 1> 2 0.97724986805182079
- 1> 3 0.9986501019683699
- 1> 4 0.99996832875816688
- 1> 5 0.99999971334842808
- 1> 6 0.9999999990134123
- 1> 7 0.99999999999872013
- 1> 8 0.99999999999999933
- 1> 9 1
- 1> 10 1
- */
|