@cindex logarithm and related functions

Information on the properties of the Logarithm function can be found in
Abramowitz & Stegun, Chapter 4.  The functions described in this section
are declared in the header file @file{gsl_sf_log.h}.

@deftypefun double gsl_sf_log (double @var{x})
@deftypefunx int gsl_sf_log_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the logarithm of @var{x}, @math{\log(x)}, for
@math{x > 0}.
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun


@deftypefun double gsl_sf_log_abs (double @var{x})
@deftypefunx int gsl_sf_log_abs_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the logarithm of the magnitude of @var{x},
@math{\log(|x|)}, for @math{x \ne 0}.
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun


@deftypefun int gsl_sf_complex_log_e (double @var{zr}, double @var{zi}, gsl_sf_result * @var{lnr}, gsl_sf_result * @var{theta})
This routine computes the complex logarithm of @math{z = z_r + i
z_i}. The results are returned as @var{lnr}, @var{theta} such that
@math{\exp(lnr + i \theta) = z_r + i z_i}, where @math{\theta} lies in
the range @math{[-\pi,\pi]}.
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun


@deftypefun double gsl_sf_log_1plusx (double @var{x})
@deftypefunx int gsl_sf_log_1plusx_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute @math{\log(1 + x)} for @math{x > -1} using an
algorithm that is accurate for small @math{x}.
@comment Domain: x > -1.0
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun


@deftypefun double gsl_sf_log_1plusx_mx (double @var{x})
@deftypefunx int gsl_sf_log_1plusx_mx_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute @math{\log(1 + x) - x} for @math{x > -1} using an
algorithm that is accurate for small @math{x}.
@comment Domain: x > -1.0 
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun
