[template history[]

[h4 Boost-1.45.0]

* Added warnings about potential ambiguity with std random library in distribution and function names.
* Added inverse gamma distribution and inverse chi_square and scaled inverse chi_square.
* Editorial revision of documentation, and added FAQ.

[h4 Boost-1.44.0]

* Fixed incorrect range and support for Rayleigh distribution.
* Fixed numerical error in the quantile of the Student's T distribution: the function was
returning garbage values for non-integer degrees of freedom between 2 and 3.

[h4 Boost-1.41.0]

* Significantly improved performance for the incomplete gamma function and its inverse.

[h4 Boost-1.40.0]

* Added support for MPFR as a bignum type.
* Added some full specializations of the policy classes to reduce compile times.
* Added logistic and hypergeometric distributions, from Gautam Sewani's Google Summer of Code project.
* Added Laplace distribution submitted by Thijs van den Berg.
* Updated performance test code to include new distributions, and improved the performance of the non-central distributions.
* Added SSE2 optimised __lanczos code, from Gautam Sewani's Google Summer of Code project.
* Fixed bug in cyl_bessel_i that used an incorrect approximation for [nu] = 0.5, also effects the non-central
   Chi Square Distribution when [nu] = 3, see bug report [@https://svn.boost.org/trac/boost/ticket/2877 #2877].
* Fixed minor bugs [@https://svn.boost.org/trac/boost/ticket/2873 #2873].

[h4 Boost-1.38.0]

* Added Johan R'''&#xE5;'''de's optimised floating point classification routines.
* Fixed code so that it compiles in GCC's -pedantic mode (bug report 
[@https://svn.boost.org/trac/boost/ticket/1451 #1451]).

[h4 Boost-1.37.0]

* Improved accuracy and testing of the inverse hypergeometric functions.

[h4 Boost-1.36.0]

* Added Noncentral Chi Squared Distribution.
* Added Noncentral Beta Distribution.
* Added Noncentral F Distribution.
* Added Noncentral T Distribution.
* Added Exponential Integral Functions.
* Added Zeta Function.
* Added Rounding and Truncation functions.
* Added Compile time powers of runtime bases.
* Added SSE2 optimizations for Lanczos evaluation.

[h4 Boost-1.35.0: Post Review First Official Release]

* Added Policy based framework that allows fine grained control
over function behaviour.
* [*Breaking change:] Changed default behaviour for domain, pole and overflow errors
to throw an exception (based on review feedback), this
behaviour can be customised using __Policy's.
* [*Breaking change:] Changed exception thrown when an internal evaluation error
occurs to boost::math::evaluation_error.
* [*Breaking change:] Changed discrete quantiles to return an integer result:
this is anything up to 20 times faster than finding the true root, this
behaviour can be customised using __Policy's.
* Polynomial/rational function evaluation is now customisable and hopefully
faster than before.
* Added performance test program.

[h4 Milestone 4: Second Review Candidate (1st March 2007)]

* Moved Xiaogang Zhang's Bessel Functions code into the library,
and brought them into line with the rest of the code.
* Added C# "Distribution Explorer" demo application.

[h4 Milestone 3: First Review Candidate (31st Dec 2006)]

* Implemented the main probability distribution and density functions.
* Implemented digamma.
* Added more factorial functions.
* Implemented the Hermite, Legendre and Laguerre polynomials plus the 
spherical harmonic functions from TR1.
* Moved Xiaogang Zhang's elliptic integral code into the library,
and brought them into line with the rest of the code.
* Moved Hubert Holin's existing Boost.Math special functions
into this library and brought them into line with the rest of the code.

[h4 Milestone 2: Released September 10th 2006]

* Implement preview release of the statistical distributions.
* Added statistical distributions tutorial.
* Implemented root finding algorithms.
* Implemented the inverses of the incomplete gamma and beta functions.
* Rewrite erf/erfc as rational approximations (valid to 128-bit precision).
* Integrated the statistical results generated from
the test data with Boost.Test: uses a database of expected
results, indexed by test, floating point type, platform, and compiler.
* Improved lgamma near 1 and 2 (rational approximations).
* Improved erf/erfc inverses (rational approximations).
* Implemented Rational function generation (the Remez method).

[h4 Milestone 1: Released March 31st 2006]

* Implement gamma/beta/erf functions along with their incomplete counterparts.
* Generate high quality test data, against which future improvements can be judged.
* Provide tools for the evaluation of infinite series, continued fractions, and
rational functions.
* Provide tools for testing against tabulated test data, and collecting statistics
on error rates.
* Provide sufficient docs for people to be able to find their way around the library.

SVN Revisions:

Sandbox and trunk last synchonised at revision: .

]
[/ 
  Copyright 2006 - 2010 John Maddock and Paul A. Bristow.
  Distributed under 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).
]



