@cindex dilogarithm

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

@menu
* Real Argument::               
* Complex Argument::            
@end menu

@node Real Argument
@subsection Real Argument

@deftypefun double gsl_sf_dilog (double @var{x})
@deftypefunx int gsl_sf_dilog_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the dilogarithm for a real argument. In Lewin's
notation this is @math{Li_2(x)}, the real part of the dilogarithm of a
real @math{x}.  It is defined by the integral representation
@math{Li_2(x) = - \Re \int_0^x ds \log(1-s) / s}.  
Note that @math{\Im(Li_2(x)) = 0} for @c{$x \le 1$} 
@math{x <= 1}, and @math{-\pi\log(x)} for @math{x > 1}.

@end deftypefun

@node Complex Argument
@subsection Complex Argument


@deftypefun int gsl_sf_complex_dilog_e (double @var{r}, double @var{theta}, gsl_sf_result * @var{result_re}, gsl_sf_result * @var{result_im})
This function computes the full complex-valued dilogarithm for the
complex argument @math{z = r \exp(i \theta)}. The real and imaginary
parts of the result are returned in @var{result_re}, @var{result_im}.
@end deftypefun
