@cindex exponential integrals
@cindex integrals, exponential

Information on the exponential integrals can be found in Abramowitz &
Stegun, Chapter 5.  These functions are declared in the header file
@file{gsl_sf_expint.h}.

@menu
* Exponential Integral::        
* Ei(x)::                       
* Hyperbolic Integrals::        
* Ei_3(x)::                     
* Trigonometric Integrals::     
* Arctangent Integral::         
@end menu

@node Exponential Integral
@subsection Exponential Integral
@cindex E1(x), E2(x), Ei(x)

@deftypefun double gsl_sf_expint_E1 (double @var{x})
@deftypefunx int gsl_sf_expint_E1_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the exponential integral @math{E_1(x)},
@tex
\beforedisplay
$$
E_1(x) := \Re \int_1^\infty dt \exp(-xt)/t.
$$
\afterdisplay
@end tex
@ifinfo

@example
E_1(x) := \Re \int_1^\infty dt \exp(-xt)/t.
@end example

@end ifinfo
@noindent
@comment Domain: x != 0.0
@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
@end deftypefun

@deftypefun double gsl_sf_expint_E2 (double @var{x})
@deftypefunx int gsl_sf_expint_E2_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the second-order exponential integral @math{E_2(x)},
@tex
\beforedisplay
$$
E_2(x) := \Re \int_1^\infty dt \exp(-xt)/t^2.
$$
\afterdisplay
@end tex
@ifinfo

@example
E_2(x) := \Re \int_1^\infty dt \exp(-xt)/t^2.
@end example

@end ifinfo
@noindent
@comment Domain: x != 0.0
@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
@end deftypefun

@node Ei(x)
@subsection Ei(x)

@deftypefun double gsl_sf_expint_Ei (double @var{x})
@deftypefunx int gsl_sf_expint_Ei_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the exponential integral @math{Ei(x)},
@tex
\beforedisplay
$$
Ei(x) := - PV\left(\int_{-x}^\infty dt \exp(-t)/t\right)
$$
\afterdisplay
@end tex
@ifinfo

@example
Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)
@end example

@end ifinfo
@noindent
where @math{PV} denotes the principal value of the integral.
@comment Domain: x != 0.0
@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
@end deftypefun


@node Hyperbolic Integrals
@subsection Hyperbolic Integrals
@cindex hyperbolic integrals
@cindex Shi(x)
@cindex Chi(x)

@deftypefun double gsl_sf_Shi (double @var{x})
@deftypefunx int gsl_sf_Shi_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the integral @math{Shi(x) = \int_0^x dt \sinh(t)/t}.
@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
@end deftypefun


@deftypefun double gsl_sf_Chi (double @var{x})
@deftypefunx int gsl_sf_Chi_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the integral @math{ Chi(x) := \Re[ \gamma_E + \log(x) + \int_0^x dt (\cosh[t]-1)/t] }, where @math{\gamma_E} is the Euler constant (available as the macro @code{M_EULER}).
@comment Domain: x != 0.0
@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
@end deftypefun


@node Ei_3(x)
@subsection Ei_3(x)

@deftypefun double gsl_sf_expint_3 (double @var{x})
@deftypefunx int gsl_sf_expint_3_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the third-order exponential integral 
@math{Ei_3(x) = \int_0^xdt \exp(-t^3)} for @c{$x \ge 0$}
@math{x >= 0}.
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun

@node Trigonometric Integrals
@subsection Trigonometric Integrals
@cindex trigonometric integrals
@cindex Si(x)
@cindex Ci(x)
@deftypefun double gsl_sf_Si (const double @var{x})
@deftypefunx int gsl_sf_Si_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the Sine integral
@math{Si(x) = \int_0^x dt \sin(t)/t}.
@comment Exceptional Return Values: none
@end deftypefun

 
@deftypefun double gsl_sf_Ci (const double @var{x})
@deftypefunx int gsl_sf_Ci_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the Cosine integral @math{Ci(x) = -\int_x^\infty dt
\cos(t)/t} for @math{x > 0}.  
@comment Domain: x > 0.0
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun


@node Arctangent Integral
@subsection Arctangent Integral
@cindex arctangent integral
@deftypefun double gsl_sf_atanint (double @var{x})
@deftypefunx int gsl_sf_atanint_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the Arctangent integral, which is defined as @math{AtanInt(x) = \int_0^x dt \arctan(t)/t}.
@comment Domain: 
@comment Exceptional Return Values: 
@end deftypefun

