]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/math/README.md
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / math / README.md
1 Boost Math Library [![Build Status](https://travis-ci.org/boostorg/math.svg?branch=develop)](https://travis-ci.org/boostorg/math)
2 ==================
3
4 >ANNOUNCEMENT: Support for C++03 is now deprecated in this library and will be supported in existing features
5 >only until March 2021. New features will require *at least* C++11, as will existing features from next year.
6
7 This library is divided into several interconnected parts:
8
9 ### Floating Point Utilities
10
11 Utility functions for dealing with floating point arithmetic, includes functions for floating point classification (fpclassify, isnan, isinf etc), sign manipulation, rounding, comparison, and computing the distance between floating point numbers.
12
13 ### Specific Width Floating Point Types
14
15 A set of typedefs similar to those provided by `<cstdint>` but for floating point types.
16
17 ### Mathematical Constants
18
19 A wide range of constants ranging from various multiples of π, fractions, Euler's constant, etc.
20
21 These are of course usable from template code, or as non-templates with a simplified interface if that is more appropriate.
22
23 ### Statistical Distributions
24
25 Provides a reasonably comprehensive set of statistical distributions, upon which higher level statistical tests can be built.
26
27 The initial focus is on the central univariate distributions. Both continuous (like normal & Fisher) and discrete (like binomial & Poisson) distributions are provided.
28
29 A comprehensive tutorial is provided, along with a series of worked examples illustrating how the library is used to conduct statistical tests.
30
31 ### Special Functions
32
33 Provides a small number of high quality special functions; initially these were concentrated on functions used in statistical applications along with those in the Technical Report on C++ Library Extensions.
34
35 The function families currently implemented are the gamma, beta & error functions along with the incomplete gamma and beta functions (four variants of each) and all the possible inverses of these, plus the digamma, various factorial functions, Bessel functions, elliptic integrals, hypergeometrics, sinus cardinals (along with their hyperbolic variants), inverse hyperbolic functions, Legrendre/Laguerre/Hermite/Chebyshev polynomials and various special power and logarithmic functions.
36
37 All the implementations are fully generic and support the use of arbitrary "real-number" types, including Boost.Multiprecision, although they are optimised for use with types with known significand (or mantissa) sizes: typically float, double or long double.
38
39 These functions also provide the basis of support for the TR1 special functions.
40
41 ### Root Finding and Function Minimisation
42
43 A comprehensive set of root-finding algorithms over the real line, both with derivatives and derivative free.
44
45 Also function minimisation via Brent's Method.
46
47 ### Polynomials and Rational Functions
48
49 Tools for manipulating polynomials and for efficient evaluation of rationals or polynomials.
50
51 ### Interpolation
52
53 Function interpolation via barycentric rational interpolation, compactly supported quadartic, cubic, and quintic B-splines, the Chebyshev transform, trigonometric polynomials, Makima, pchip, and cubic Hermite splines.
54
55 ### Numerical Integration and Differentiation
56
57 A reasonably comprehensive set of routines for integration (trapezoidal, Gauss-Legendre, Gauss-Kronrod, Gauss-Chebyshev, double-exponential, and Monte-Carlo) and differentiation (Chebyshev transform, finite difference, the complex step derivative, and forward-mode automatic differentiation).
58
59 The integration routines are usable for functions returning complex results - and hence can be used for computation of contour integrals.
60
61 ### Quaternions and Octonions
62
63 Quaternion and Octonians are class templates similar to std::complex.
64
65 The full documentation is available on [boost.org](http://www.boost.org/doc/libs/release/libs/math).
66
67 | | Master | Develop |
68 |------------------|----------|-------------|
69 | Travis | [![Build Status](https://travis-ci.org/boostorg/math.svg?branch=master)](https://travis-ci.org/boostorg/math) | [![Build Status](https://travis-ci.org/boostorg/math.svg)](https://travis-ci.org/boostorg/math) |
70 | Appveyor | [![Build status](https://ci.appveyor.com/api/projects/status/cnugjx9dt7cou7nj/branch/master?svg=true)](https://ci.appveyor.com/project/jzmaddock/math/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/cnugjx9dt7cou7nj/branch/develop?svg=true)](https://ci.appveyor.com/project/jzmaddock/math/branch/develop) |
71
72
73
74 ## Support, bugs and feature requests ##
75
76 Bugs and feature requests can be reported through the [GitHub issue tracker](https://github.com/boostorg/math/issues)
77 (see [open issues](https://github.com/boostorg/math/issues) and
78 [closed issues](https://github.com/boostorg/math/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aclosed)).
79
80 You can submit your changes through a [pull request](https://github.com/boostorg/math/pulls).
81
82 There is no mailing-list specific to Boost Math, although you can use the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo.cgi/boost-users) using the tag [math].
83
84
85 ## Development ##
86
87 Clone the whole boost project, which includes the individual Boost projects as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Getting-Started)):
88
89 $ git clone https://github.com/boostorg/boost
90 $ cd boost
91 $ git submodule update --init
92
93 The Boost Math Library is located in `libs/math/`.
94
95 ### Running tests ###
96 First, make sure you are in `libs/math/test`.
97 You can either run all the tests listed in `Jamfile.v2` or run a single test:
98
99 test$ ../../../b2 <- run all tests
100 test$ ../../../b2 static_assert_test <- single test
101 test$ # A more advanced syntax, demoing various options for building the tests:
102 test$ ../../../b2 -a -j2 -q --reconfigure toolset=clang cxxflags="--std=c++14 -fsanitize=address -fsanitize=undefined" linkflags="-fsanitize=undefined -fsanitize=address"
103
104 ### Building documentation ###
105
106 Full instructions can be found [here](https://svn.boost.org/trac10/wiki/BoostDocs/GettingStarted), but to reiterate slightly:
107
108 ```bash
109 libs/math/doc$ brew install docbook-xsl # on mac
110 libs/math/doc$ touch ~/user-config.jam
111 libs/math/doc$ # now edit so that:
112 libs/math/doc$ cat ~/user-config.jam
113 using darwin ;
114
115 using xsltproc ;
116
117 using boostbook
118 : /usr/local/opt/docbook-xsl/docbook-xsl
119 ;
120
121 using doxygen ;
122 using quickbook ;
123 libs/math/doc$ ../../../b2
124 ```