@cindex Fermi-Dirac function

The functions described in this section are declared in the header file
@file{gsl_sf_fermi_dirac.h}.

@menu
* Complete Fermi-Dirac Integrals::  
* Incomplete Fermi-Dirac Integrals::  
@end menu

@node Complete Fermi-Dirac Integrals
@subsection Complete Fermi-Dirac Integrals
@cindex complete Fermi-Dirac integrals
@cindex Fj(x), Fermi-Dirac integral
The complete Fermi-Dirac integral @math{F_j(x)} is given by,
@tex
\beforedisplay
$$
F_j(x)   := {1\over\Gamma(j+1)} \int_0^\infty dt {t^j  \over (\exp(t-x) + 1)}
$$
\afterdisplay
@end tex
@ifinfo

@example
F_j(x)   := (1/r\Gamma(j+1)) \int_0^\infty dt (t^j / (\exp(t-x) + 1))
@end example
@end ifinfo

@deftypefun double gsl_sf_fermi_dirac_m1 (double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_m1_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral with an index of @math{-1}. 
This integral is given by 
@c{$F_{-1}(x) = e^x / (1 + e^x)$}
@math{F_@{-1@}(x) = e^x / (1 + e^x)}.
@comment Exceptional Return Values: GSL_EUNDRFLW
@end deftypefun

@deftypefun double gsl_sf_fermi_dirac_0 (double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_0_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral with an index of @math{0}. 
This integral is given by @math{F_0(x) = \ln(1 + e^x)}.
@comment Exceptional Return Values: GSL_EUNDRFLW
@end deftypefun

@deftypefun double gsl_sf_fermi_dirac_1 (double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_1_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral with an index of @math{1},
@math{F_1(x) = \int_0^\infty dt (t /(\exp(t-x)+1))}.
@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
@end deftypefun

@deftypefun double gsl_sf_fermi_dirac_2 (double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_2_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral with an index
of @math{2},
@math{F_2(x) = (1/2) \int_0^\infty dt (t^2 /(\exp(t-x)+1))}.
@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
@end deftypefun

@deftypefun double gsl_sf_fermi_dirac_int (int @var{j}, double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_int_e (int @var{j}, double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral with an integer
index of @math{j},
@math{F_j(x) = (1/\Gamma(j+1)) \int_0^\infty dt (t^j /(\exp(t-x)+1))}.
@comment Complete integral F_j(x) for integer j
@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
@end deftypefun

@deftypefun double gsl_sf_fermi_dirac_mhalf (double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_mhalf_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral 
@c{$F_{-1/2}(x)$}
@math{F_@{-1/2@}(x)}.
@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
@end deftypefun

@deftypefun double gsl_sf_fermi_dirac_half (double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_half_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral 
@c{$F_{1/2}(x)$}
@math{F_@{1/2@}(x)}.
@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
@end deftypefun

@deftypefun double gsl_sf_fermi_dirac_3half (double @var{x})
@deftypefunx int gsl_sf_fermi_dirac_3half_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the complete Fermi-Dirac integral 
@c{$F_{3/2}(x)$}
@math{F_@{3/2@}(x)}.
@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
@end deftypefun


@node Incomplete Fermi-Dirac Integrals
@subsection Incomplete Fermi-Dirac Integrals
@cindex incomplete Fermi-Dirac integral
@cindex Fj(x,b), incomplete Fermi-Dirac integral
The incomplete Fermi-Dirac integral @math{F_j(x,b)} is given by,
@tex
\beforedisplay
$$
F_j(x,b)   := {1\over\Gamma(j+1)} \int_b^\infty dt {t^j  \over (\exp(t-x) + 1)}
$$
\afterdisplay
@end tex
@ifinfo

@example
F_j(x,b)   := (1/\Gamma(j+1)) \int_b^\infty dt (t^j / (\Exp(t-x) + 1))
@end example
@end ifinfo

@deftypefun double gsl_sf_fermi_dirac_inc_0 (double @var{x}, double @var{b})
@deftypefunx int gsl_sf_fermi_dirac_inc_0_e (double @var{x}, double @var{b}, gsl_sf_result * @var{result})
These routines compute the incomplete Fermi-Dirac integral with an index
of zero,
@c{$F_0(x,b) = \ln(1 + e^{b-x}) - (b-x)$}
@math{F_0(x,b) = \ln(1 + e^@{b-x@}) - (b-x)}.
@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EDOM
@end deftypefun

