// @(#)root/mathcore:$Id$
// Authors: Andras Zsenei & Lorenzo Moneta 06/2005
/**********************************************************************
* *
* Copyright (c) 2005 , LCG ROOT MathLib Team *
* *
* *
**********************************************************************/
/**
Special mathematical functions.
The naming and numbering of the functions is taken from
Matt Austern,
(Draft) Technical Report on Standard Library Extensions,
N1687=04-0127, September 10, 2004
@author Created by Andras Zsenei on Mon Nov 8 2004
@defgroup SpecFunc Special functions
*/
#if defined(__CINT__) && !defined(__MAKECINT__)
// avoid to include header file when using CINT
#ifndef _WIN32
#include "../lib/libMathCore.so"
#else
#include "../bin/libMathCore.dll"
#endif
#else
#ifndef ROOT_Math_SpecFuncMathCore
#define ROOT_Math_SpecFuncMathCore
namespace ROOT {
namespace Math {
/** @name Special Functions from MathCore */
/**
Error function encountered in integrating the normal distribution.
\f[ erf(x) = \frac{2}{\sqrt{\pi}} \int_{0}^{x} e^{-t^2} dt \f]
For detailed description see
Mathworld.
The implementation used is that of
GSL.
This function is provided only for convenience,
in case your standard C++ implementation does not support
it. If it does, please use these standard version!
@ingroup SpecFunc
*/
// (26.x.21.1) error function
double erf(double x);
/**
Complementary error function.
\f[ erfc(x) = 1 - erf(x) = \frac{2}{\sqrt{\pi}} \int_{x}^{\infty} e^{-t^2} dt \f]
For detailed description see Mathworld.
The implementation used is that of Cephes from S. Moshier.
@ingroup SpecFunc
*/
// (26.x.21.2) complementary error function
double erfc(double x);
/**
The gamma function is defined to be the extension of the
factorial to real numbers.
\f[ \Gamma(x) = \int_{0}^{\infty} t^{x-1} e^{-t} dt \f]
For detailed description see
Mathworld.
The implementation used is that of Cephes from S. Moshier.
@ingroup SpecFunc
*/
// (26.x.18) gamma function
double tgamma(double x);
/**
Calculates the logarithm of the gamma function
The implementation used is that of Cephes from S. Moshier.
@ingroup SpecFunc
*/
double lgamma(double x);
/**
Calculates the normalized (regularized) lower incomplete gamma function (lower integral)
\f[ P(a, x) = \frac{ 1} {\Gamma(a) } \int_{0}^{x} t^{a-1} e^{-t} dt \f]
For a detailed description see
Mathworld.
The implementation used is that of Cephes from S. Moshier.
In this implementation both a and x must be positive. If a is negative 1.0 is returned for every x.
This is correct only if a is negative integer.
For a>0 and x<0 0 is returned (this is correct only for a>0 and x=0).
@ingroup SpecFunc
*/
double inc_gamma(double a, double x );
/**
Calculates the normalized (regularized) upper incomplete gamma function (upper integral)
\f[ Q(a, x) = \frac{ 1} {\Gamma(a) } \int_{x}^{\infty} t^{a-1} e^{-t} dt \f]
For a detailed description see
Mathworld.
The implementation used is that of Cephes from S. Moshier.
In this implementation both a and x must be positive. If a is negative, 0 is returned for every x.
This is correct only if a is negative integer.
For a>0 and x<0 1 is returned (this is correct only for a>0 and x=0).
@ingroup SpecFunc
*/
double inc_gamma_c(double a, double x );
/**
Calculates the beta function.
\f[ B(x,y) = \frac{\Gamma(x) \Gamma(y)}{\Gamma(x+y)} \f]
for x>0 and y>0. For detailed description see
Mathworld.
@ingroup SpecFunc
*/
// [5.2.1.3] beta function
double beta(double x, double y);
/**
Calculates the normalized (regularized) incomplete beta function.
\f[ B(x, a, b ) = \frac{ \int_{0}^{x} u^{a-1} (1-u)^{b-1} du } { B(a,b) } \f]
for 0<=x<=1, a>0, and b>0. For detailed description see
Mathworld.
The implementation used is that of Cephes from S. Moshier.
@ingroup SpecFunc
*/
double inc_beta( double x, double a, double b);
/**
Calculates the sine integral.
\f[ Si(x) = - \int_{0}^{x} \frac{\sin t}{t} dt \f]
For detailed description see
Mathworld. The implementation used is that of
CERNLIB,
based on Y.L. Luke, The special functions and their approximations, v.II, (Academic Press, New York l969) 325-326.
@ingroup SpecFunc
*/
double sinint(double x);
/**
Calculates the real part of the cosine integral \Re(Ci).
For x<0, the imaginary part is \pi i and has to be added by the user,
for x>0 the imaginary part of Ci(x) is 0.
\f[ Ci(x) = - \int_{x}^{\infty} \frac{\cos t}{t} dt = \gamma + \ln x + \int_{0}^{x} \frac{\cos t - 1}{t} dt\f]
For detailed description see
Mathworld. The implementation used is that of
CERNLIB,
based on Y.L. Luke, The special functions and their approximations, v.II, (Academic Press, New York l969) 325-326.
@ingroup SpecFunc
*/
double cosint(double x);
} // namespace Math
} // namespace ROOT
#endif // ROOT_Math_SpecFuncMathCore
#endif // if defined (__CINT__) && !defined(__MAKECINT__)