...one of the most highly
regarded and expertly designed C++ library projects in the
world. — Herb Sutter and Andrei
Hubert Holin started the Boost.Math library. The Quaternions, Octonions, inverse hyperbolic functions, and the sinus cardinal functions are his.
Daryle Walker wrote the integer gcd and lcm functions.
John Maddock started the special functions, the beta, gamma, erf, polynomial, and factorial functions are his, as is the "Toolkit" section, and many of the statistical distributions.
Paul A. Bristow threw down the challenge in A Proposal to add Mathematical Functions for Statistics to the C++ Standard Library to add the key math functions, especially those essential for statistics. After JM accepted and solved the difficult problems, not only numerically, but in full C++ template style, PAB implemented a few of the statistical distributions. PAB also tirelessly proof-read everything that JM threw at him (so that all remaining editorial mistakes are his fault).
Xiaogang Zhang worked on the Bessel functions and elliptic integrals for his Google Summer of Code project 2006.
Bruno Lalande submitted the "compile time power of a runtime base" code.
Johan Råde wrote the optimised floating-point classification and manipulation code, and nonfinite facets to permit C99 output of infinities and NaNs. (nonfinite facets were not added until Boost 1.47 but had been in use with Boost.Spirit). This library was based on a suggestion from Robert Ramey, author of Boost.Serialization. Paul A. Bristow expressed the need for better handling of Input & Output of NaN and infinity for the C++ Standard Library and suggested following the C99 format.
Antony Polukhin improved lexical cast avoiding stringstream so that it was no longer necessary to use a globale C99 facet to handle nonfinites.
Håkan Ardö, Boris Gubenko, John Maddock, Markus Schöpflin and Olivier Verdier tested the floating-point library and Martin Bonner, Peter Dimov and John Maddock provided valuable advice.
Gautam Sewani coded the logistic distribution as part of a Google Summer of Code project 2008.
M. A. (Thijs) van den Berg coded the Laplace distribution. (Thijs has also threatened to implement some multivariate distributions).
Thomas Mang requested the inverse gamma in chi squared distributions for Bayesian applications and helped in their implementation, and provided a nice example of their use.
Professor Nico Temme for advice on the inverse incomplete beta function.
Victor Shoup for NTL, without which it would have much more difficult to produce high accuracy constants, and especially the tables of accurate values for testing.
We are grateful to Joel Guzman for helping us stress-test his Boost.Quickbook program used to generate the html and pdf versions of this document, adding several new features en route.
Plots of the functions and distributions were prepared in W3C standard Scalable Vector Graphic (SVG) format using a program created by Jacob Voytko during a Google Summer of Code (2007). From 2012, the latest versions of all Internet Browsers have support for rendering SVG (with varying quality). Older versions, especially (Microsoft Internet Explorer (before IE 9) lack native SVG support but can be made to work with Adobe's free SVG viewer plugin). The SVG files can be converted to JPEG or PNG using Inkscape.
We are also indebted to Matthias Schabel for managing the formal Boost-review of this library, and to all the reviewers - including Guillaume Melquiond, Arnaldur Gylfason, John Phillips, Stephan Tolksdorf and Jeff Garland - for their many helpful comments.
Thanks to Mark Coleman and Georgi Boshnakov for spot test values from Wolfram Mathematica, and of course, to Eric Weisstein for nurturing Wolfram MathWorld, an invaluable resource.
The Skew-normal distribution and Owen's t function were written by Benjamin Sobotta.
We thank Thomas Mang for persuading us to allow t distributions to have infinite degrees of freedom and contributing to some long discussions about how to improve accuracy for large non-centrality and/or large degrees of freedom.
Christopher Kormanyos wrote the e_float multiprecision library TOMS Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations which formed the basis for the Boost.Multiprecision library which now can be used to allow most functions and distributions to be computed up to a precision of the users' choice, no longer restricted to built-in floating-point types like double. (And thanks to Topher Cooper for bring Christopher's e_float to our attention).
Christopher Kormanyos wrote some examples for using Boost.Multiprecision, and added methods for finding zeros of Bessel Functions.
Marco Guazzone provided the hyper-geometric distribution.
Rocco Romeo has found numerous small bugs and generally stress tested the special functions code to near destruction!
Jeremy William Murphy added polynomial arithmetic tools.
Thomas Luu provided improvements to the quantile of the non-central chi squared distribution quantile. and his thesis * Fast and accurate parallel computation of quantile functions for random number generation, 2016.
and his paper
Luu, Thomas; (2015), Efficient and Accurate Parallel Inversion of the Gamma Distribution, SIAM Journal on Scientific Computing , 37 (1) C122 - C141, https://doi.org/10.1137/14095875X.
These also promise to help improve algorithms for computation of quantile of several disitributions, especially for parallel computation using GPUs.