~~
~~ Licensed to the Apache Software Foundation (ASF) under one or more
~~ contributor license agreements.  See the NOTICE file distributed with
~~ this work for additional information regarding copyright ownership.
~~ The ASF licenses this file to You under the Apache License, Version 2.0
~~ (the "License"); you may not use this file except in compliance with
~~ the License.  You may obtain a copy of the License at
~~
~~      http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing, software
~~ distributed under the License is distributed on an "AS IS" BASIS,
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~ See the License for the specific language governing permissions and
~~ limitations under the License.
~~

  -----------------------------------------------
  The Commons Math User Guide - Special Functions
  -----------------------------------------------

5 Special Functions

* 5.1 Overview

  The <<<special>>> package of Commons-Math gathers several useful special
  functions not provided by <<<java.lang.Math>>>.

* 5.2 Erf functions

  {{{../apidocs/org/apache/commons/math3/special/Erf.html}Erf}} contains
  several useful functions involving the Error Function, Erf.

*----------------+---------+-------------------------------------------------------------------+
|| Function      || Method || Reference                                                        |
*----------------+---------+-------------------------------------------------------------------+
| Error Function |erf      | See {{{http://mathworld.wolfram.com/Erf.html}Erf}} from MathWorld |
*----------------+---------+-------------------------------------------------------------------+

* 5.3 Gamma functions

  Class {{{../apidocs/org/apache/commons/math3/special/Gamma.html}<<<Gamma>>>}}
  contains several useful functions involving the Gamma Function.

** Gamma

  <<<Gamma.gamma(x)>>> computes the Gamma function, Γ(x)
  (see {{{http://mathworld.wolfram.com/GammaFunction.html}MathWorld}},
  {{{http://dlmf.nist.gov/5}DLMF}}). The accuracy of the Commons-Math
  implementation is assessed by comparison with high precision values computed
  with the {{{http://maxima.sourceforge.net/}Maxima}} Computer Algebra System.

*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
|| Interval      || Values tested                                || Average error  || Standard deviation  || Maximum error |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
| -5 \< x \< -4  | <<<x[i] = i / 1024, i = -5119, ..., -4097>>>  | 0.49 ulps       | 0.57 ulps            | 3.0 ulps       |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
| -4 \< x \< -3  | <<<x[i] = i / 1024, i = -4095, ..., -3073>>>  | 0.36 ulps       | 0.51 ulps            | 2.0 ulps       |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
| -3 \< x \< -2  | <<<x[i] = i / 1024, i = -3071, ..., -2049>>>  | 0.41 ulps       | 0.53 ulps            | 2.0 ulps       |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
| -2 \< x \< -1  | <<<x[i] = i / 1024, i = -2047, ..., -1025>>>  | 0.37 ulps       | 0.50 ulps            | 2.0 ulps       |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
| -1 \< x \< 0   | <<<x[i] = i / 1024, i = -1023, ..., -1>>>     | 0.46 ulps       | 0.54 ulps            | 2.0 ulps       |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
| 0 \< x ≤ 8     | <<<x[i] = i / 1024, i = 1, ..., 8192>>>       | 0.33 ulps       | 0.48 ulps            | 2.0 ulps       |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+
| 8 \< x ≤ 141   | <<<x[i] = i / 64, i = 513, ..., 9024>>>       | 1.32 ulps       | 1.19 ulps            | 7.0 ulps       |
*----------------+-----------------------------------------------+-----------------+----------------------+----------------+

** Log Gamma

  <<<Gamma.logGamma(x)>>> computes the natural logarithm of the Gamma function,
  log \u0393(x), for x > 0
  (see {{{http://mathworld.wolfram.com/LogGammaFunction.html}MathWorld}},
  {{{http://dlmf.nist.gov/5}DLMF}}). The accuracy of the Commons-Math
  implementation is assessed by comparaison with high precision values computed
  with the {{{http://maxima.sourceforge.net/}Maxima}} Computer Algebra System.

*------------------------------------------------+-----------------------------------------------+-----------------+----------------------+----------------+
|| Interval                                      || Values tested                                || Average error  || Standard deviation  || Maximum error |
*------------------------------------------------+-----------------------------------------------+-----------------+----------------------+----------------+
| 0 \< x ≤ 8                                     | <<<x[i] = i / 1024, i = 1, ..., 8192>>>       | 0.32 ulps       | 0.50 ulps            | 4.0 ulps       |
*------------------------------------------------+-----------------------------------------------+-----------------+----------------------+----------------+
| 8 \< x ≤ 1024                                  | <<<x[i] = i / 8, i = 65, ..., 8192>>>         | 0.43 ulps       | 0.53 ulps            | 3.0 ulps       |
*------------------------------------------------+-----------------------------------------------+-----------------+----------------------+----------------+
| 1024 \< x ≤ 8192                               | <<<x[i], i = 1025, ..., 8192>>>               | 0.53 ulps       | 0.56 ulps            | 3.0 ulps       |
*------------------------------------------------+-----------------------------------------------+-----------------+----------------------+----------------+
| 8933.439345993791 ≤ x ≤ 1.75555970201398e+305  | <<<x[i] = 2**(i / 8), i = 105, ..., 8112>>>   | 0.35 ulps       | 0.49 ulps            | 2.0 ulps       |
*------------------------------------------------+-----------------------------------------------+-----------------+----------------------+----------------+
                                                                                                      
** Regularized Gamma

  <<<Gamma.regularizedGammaP(a, x)>>> computes the value of the regularized
  Gamma function, P(a, x)
  (see {{{http://mathworld.wolfram.com/RegularizedGammaFunction.html}MathWorld}}).

* 5.4 Beta functions

  {{{../apidocs/org/apache/commons/math3/special/Beta.html}Beta}} contains
  several useful functions involving the Beta Function.

** Log Beta

  <<<Beta.logBeta(a, b)>>> computes the value of the natural logarithm of the
  Beta function, log B(a, b).
  (see {{{http://mathworld.wolfram.com/BetaFunction.html}MathWorld}},
  {{{http://dlmf.nist.gov/5.12}DLMF}}). The accuracy of the Commons-Math
  implementation is assessed by comparison with high precision values computed
  with the {{{http://maxima.sourceforge.net/}Maxima}} Computer Algebra System.

*----------------+-----------------------------------------+-----------------+----------------------+----------------+
|| Interval      || Values tested                          || Average error  || Standard deviation  || Maximum error  |
*----------------+-----------------------------------------+-----------------+----------------------+-----------------+
| 0 \< x ≤ 8\    | <<<x[i] = i / 32, i = 1, ..., 256>>>\   | 1.80 ulps       | 81.08 ulps           | 14031.0 ulps    |
| 0 \< y ≤ 8     | <<<y[j] = j / 32, j = 1, ..., 256>>>    |                 |                      |                 |
*----------------+-----------------------------------------+-----------------+----------------------+-----------------+
| 0 \< x ≤ 8\    | <<<x[i] = i / 32, i = 1, ..., 256>>>\   | 0.50 ulps       | 3.64 ulps            | 694.0 ulps      |
| 8 \< y ≤ 16    | <<<y[j] = j / 32, j = 257, ..., 512>>>  |                 |                      |                 |
*----------------+-----------------------------------------+-----------------+----------------------+-----------------+
| 0 \< x ≤ 8\    | <<<x[i] = i / 32, i = 1, ..., 256>>>\   | 1.04 ulps       | 139.32 ulps          | 34509.0 ulps    |
| 16 \< y ≤ 256  | <<<y[j] = j, j = 17, ..., 256>>>        |                 |                      |                 |
*----------------+-----------------------------------------+-----------------+----------------------+-----------------+
| 8 \< x ≤ 16\   | <<<x[i] = i / 32, i = 257, ..., 512>>>\ | 0.35 ulps       | 0.48 ulps            | 2.0 ulps        |
| 8 \< y ≤ 16    | <<<y[j] = j / 32, j = 257, ..., 512>>>  |                 |                      |                 |
*----------------+-----------------------------------------+-----------------+----------------------+-----------------+
| 8 \< x ≤ 16\   | <<<x[i] = i / 32, i = 257, ..., 512>>>\ | 0.31 ulps       | 0.47 ulps            | 2.0 ulps        |
| 16 \< y ≤ 256  | <<<y[j] = j, j = 17, ..., 256>>>        |                 |                      |                 |
*----------------+-----------------------------------------+-----------------+----------------------+-----------------+
| 16 \< x ≤ 256\ | <<<x[i] = i, i = 17, ..., 256>>>\       | 0.35 ulps       | 0.49 ulps            | 2.0 ulps        |
| 16 \< y ≤ 256  | <<<y[j] = j, j = 17, ..., 256>>>        |                 |                      |                 |
*----------------+-----------------------------------------+-----------------+----------------------+-----------------+

** Regularized Beta

  (see {{{http://mathworld.wolfram.com/RegularizedBetaFunction.html}MathWorld}})
