Go to the first, previous, next, last section, table of contents.

This chapter describes basic mathematical functions. Some of these functions are present in system libraries, but the alternative versions given here can be used as a substitute when the system functions are not available.

The functions and macros described in this chapter are defined in the
header file ``gsl_math.h'`.

The library ensures that the standard BSD mathematical constants are defined. For reference, here is a list of the constants:

`M_E`

- The base of exponentials, e
`M_LOG2E`

- The base-2 logarithm of e, \log_2 (e)
`M_LOG10E`

- The base-10 logarithm of e, \log_10 (e)
`M_SQRT2`

- The square root of two, \sqrt 2
`M_SQRT1_2`

- The square root of one-half, \sqrt{1/2}
`M_SQRT3`

- The square root of three, \sqrt 3
`M_PI`

- The constant pi, \pi
`M_PI_2`

- Pi divided by two, \pi/2
`M_PI_4`

- Pi divided by four, \pi/4
`M_SQRTPI`

- The square root of pi, \sqrt\pi
`M_2_SQRTPI`

- Two divided by the square root of pi, 2/\sqrt\pi
`M_1_PI`

- The reciprocal of pi, 1/\pi
`M_2_PI`

- Twice the reciprocal of pi, 2/\pi
`M_LN10`

- The natural logarithm of ten, \ln(10)
`M_LN2`

- The natural logarithm of two, \ln(2)
`M_LNPI`

- The natural logarithm of pi, \ln(\pi)
`M_EULER`

- Euler's constant, \gamma

__Macro:__**GSL_POSINF**-
This macro contains the IEEE representation of positive infinity,
+\infty. It is computed from the expression
`+1.0/0.0`

.

__Macro:__**GSL_NEGINF**-
This macro contains the IEEE representation of negative infinity,
-\infty. It is computed from the expression
`-1.0/0.0`

.

__Macro:__**GSL_NAN**-
This macro contains the IEEE representation of the Not-a-Number symbol,
`NaN`

. It is computed from the ratio`0.0/0.0`

.

__Function:__int**gsl_isnan***(const double*`x`)-
This function returns 1 if
`x`is not-a-number.

__Function:__int**gsl_isinf***(const double*`x`)-
This function returns +1 if
`x`is positive infinity, -1 if`x`is negative infinity and 0 otherwise.(6)

__Function:__int**gsl_finite***(const double*`x`)-
This function returns 1 if
`x`is a real number, and 0 if it is infinite or not-a-number.

The following routines provide portable implementations of functions
found in the BSD math library. When native versions are not available
the functions described here can be used instead. The substitution can
be made automatically if you use `autoconf`

to compile your
application (see section Portability functions).

__Function:__double**gsl_log1p***(const double*`x`)-
This function computes the value of \log(1+x) in a way that is
accurate for small
`x`. It provides an alternative to the BSD math function`log1p(x)`

.

__Function:__double**gsl_expm1***(const double*`x`)-
This function computes the value of \exp(x)-1 in a way that is
accurate for small
`x`. It provides an alternative to the BSD math function`expm1(x)`

.

__Function:__double**gsl_hypot***(const double*`x`, const double`y`)-
This function computes the value of
\sqrt{x^2 + y^2} in a way that avoids overflow. It provides an
alternative to the BSD math function
`hypot(x,y)`

.

__Function:__double**gsl_hypot3***(const double*`x`, const double`y`, const double`z`)- This function computes the value of \sqrt{x^2 + y^2 + z^2} in a way that avoids overflow.

__Function:__double**gsl_acosh***(const double*`x`)-
This function computes the value of \arccosh(x). It provides an
alternative to the standard math function
`acosh(x)`

.

__Function:__double**gsl_asinh***(const double*`x`)-
This function computes the value of \arcsinh(x). It provides an
alternative to the standard math function
`asinh(x)`

.

__Function:__double**gsl_atanh***(const double*`x`)-
This function computes the value of \arctanh(x). It provides an
alternative to the standard math function
`atanh(x)`

.

__Function:__double**gsl_ldexp***(double*`x`, int`e`)-
This function computes the value of x * 2^e. It provides an
alternative to the standard math function
`ldexp(x,e)`

.

__Function:__double**gsl_frexp***(double*`x`, int *`e`)-
This function splits the number x into its normalized fraction
f and exponent e, such that x = f * 2^e and
0.5 <= f < 1. The function returns f and stores the
exponent in e. If x is zero, both f and e
are set to zero. This function provides an alternative to the standard
math function
`frexp(x, e)`

.

A common complaint about the standard C library is its lack of a function for calculating (small) integer powers. GSL provides some simple functions to fill this gap. For reasons of efficiency, these functions do not check for overflow or underflow conditions.

__Function:__double**gsl_pow_int***(double*`x`, int`n`)__Function:__double**gsl_pow_uint***(double*`x`, unsigned int`n`)-
These routines computes the power x^n for integer
`n`. The power is computed efficiently--for example, x^8 is computed as ((x^2)^2)^2, requiring only 3 multiplications. A version of this function which also computes the numerical error in the result is available as`gsl_sf_pow_int_e`

.

__Function:__double**gsl_pow_2***(const double*`x`)__Function:__double**gsl_pow_3***(const double*`x`)__Function:__double**gsl_pow_4***(const double*`x`)__Function:__double**gsl_pow_5***(const double*`x`)__Function:__double**gsl_pow_6***(const double*`x`)__Function:__double**gsl_pow_7***(const double*`x`)__Function:__double**gsl_pow_8***(const double*`x`)__Function:__double**gsl_pow_9***(const double*`x`)-
These functions can be used to compute small integer powers x^2,
x^3, etc. efficiently. The functions will be inlined when
`HAVE_INLINE`

is defined, so that use of these functions should be as efficient as explicitly writing the corresponding product expression.

#include <gsl/gsl_math.h> double y = gsl_pow_4 (3.141) /* compute 3.141**4 */

__Macro:__**GSL_SIGN***(x)*-
This macro returns the sign of
`x`. It is defined as`((x) >= 0 ? 1 : -1)`

. Note that with this definition the sign of zero is positive (regardless of its IEEE sign bit).

__Macro:__**GSL_IS_ODD***(n)*-
This macro evaluates to 1 if
`n`is odd and 0 if`n`is even. The argument`n`must be of integer type.

__Macro:__**GSL_IS_EVEN***(n)*-
This macro is the opposite of
`GSL_IS_ODD(n)`

. It evaluates to 1 if`n`is even and 0 if`n`is odd. The argument`n`must be of integer type.

Note that the following macros perform multiple evaluations of their arguments, so they should not be used with arguments that have side effects (such as a call to a random number generator).

__Macro:__**GSL_MAX***(a, b)*-
This macro returns the maximum of
`a`and`b`. It is defined as`((a) > (b) ? (a):(b))`

.

__Macro:__**GSL_MIN***(a, b)*-
This macro returns the minimum of
`a`and`b`. It is defined as`((a) < (b) ? (a):(b))`

.

__Function:__extern inline double**GSL_MAX_DBL***(double*`a`, double`b`)-
This function returns the maximum of the double precision numbers
`a`and`b`using an inline function. The use of a function allows for type checking of the arguments as an extra safety feature. On platforms where inline functions are not available the macro`GSL_MAX`

will be automatically substituted.

__Function:__extern inline double**GSL_MIN_DBL***(double*`a`, double`b`)-
This function returns the minimum of the double precision numbers
`a`and`b`using an inline function. The use of a function allows for type checking of the arguments as an extra safety feature. On platforms where inline functions are not available the macro`GSL_MIN`

will be automatically substituted.

__Function:__extern inline int**GSL_MAX_INT***(int*`a`, int`b`)__Function:__extern inline int**GSL_MIN_INT***(int*`a`, int`b`)-
These functions return the maximum or minimum of the integers
`a`and`b`using an inline function. On platforms where inline functions are not available the macros`GSL_MAX`

or`GSL_MIN`

will be automatically substituted.

__Function:__extern inline long double**GSL_MAX_LDBL***(long double*`a`, long double`b`)__Function:__extern inline long double**GSL_MIN_LDBL***(long double*`a`, long double`b`)-
These functions return the maximum or minimum of the long doubles
`a`and`b`using an inline function. On platforms where inline functions are not available the macros`GSL_MAX`

or`GSL_MIN`

will be automatically substituted.

It is sometimes useful to be able to compare two floating point numbers approximately, to allow for rounding and truncation errors. The following function implements the approximate floating-point comparison algorithm proposed by D.E. Knuth in Section 4.2.2 of Seminumerical Algorithms (3rd edition).

__Function:__int**gsl_fcmp***(double*`x`, double`y`, double`epsilon`)-
This function determines whether x and y are approximately
equal to a relative accuracy
`epsilon`.The relative accuracy is measured using an interval of size 2 \delta, where \delta = 2^k \epsilon and k is the maximum base-2 exponent of x and y as computed by the function

`frexp`

.If x and y lie within this interval, they are considered approximately equal and the function returns 0. Otherwise if x < y, the function returns -1, or if x > y, the function returns +1.

Note that x and y are compared to relative accuracy, so this function is not suitable for testing whether a value is approximately zero.

The implementation is based on the package

`fcmp`

by T.C. Belding.

Go to the first, previous, next, last section, table of contents.