Main index | Section 3 | 日本語 | Options |

Math Library (libm, -lm)

#include <math.h>

The
`exp()`,
`expf()`,
and
`expl()`
functions compute the base

.Ms e exponential value of the given argument x.

.Ms e exponential value of the given argument x.

The
`exp2()`,
`exp2f()`,
and
`exp2l()`
functions compute the base 2 exponential of the given argument
x.

The
`expm1()`,
`expm1f()`,
and the
`expm1l()`
functions compute the value exp(x)-1 accurately even for tiny argument
x.

The
`pow()`,
`powf()`,
and the
`powl()`
functions compute the value
of
*x*
to the exponent
*y*.

The values of
`exp()`,
`expm1()`,
`exp2(integer)`,
and
`pow(integer, integer)`
are exact provided that they are representable.
Otherwise the error in these functions is generally below one
* ulp*.

These functions will return the appropriate computation unless an error
occurs or an argument is out of range.
The functions
`pow(x, y)`,
`powf(x, y)`,
and
`powl(x, y)`
raise an invalid exception and return an NaN if
x
< 0 and
y
is not an integer.

The function
`pow(x)`
returns x**0 = 1 for all x including x = 0, ∞, and NaN .
Previous implementations of pow may
have defined x**0 to be undefined in some or all of these
cases.
Here are reasons for returning x**0 = 1 always:

- Any program that already tests whether x is zero (or infinite or NaN) before computing x**0 cannot care whether 0**0 = 1 or not. Any program that depends upon 0**0 to be invalid is dubious anyway since that expression's meaning and, if invalid, its consequences vary from one computer system to another.
- Some Algebra texts (e.g. Sigler's) define x**0 = 1 for
all x, including x = 0.
This is compatible with the convention that accepts a[0]
as the value of polynomial
p(x) = a[0]*x**0 + a[1]*x**1 + a[2]*x**2 +...+ a[n]*x**n

at x = 0 rather than reject a[0]*0**0 as invalid.

- Analysts will accept 0**0 = 1 despite that x**y can
approach anything or nothing as x and y approach 0
independently.
The reason for setting 0**0 = 1 anyway is this:
If x(z) and y(z) are
*any*functions analytic (expandable in power series) in z around z = 0, and if there x(0) = y(0) = 0, then x(z)**y(z) -> 1 as z -> 0. - If 0**0 = 1, then ∞**0 = 1/0**0 = 1 too; and then NaN**0 = 1 too because x**0 = 1 for all finite and infinite x, i.e., independently of x.

To conform with newer C/C++ standards, a stub implementation for
**powl**
was committed to the math library, where
**powl**
is mapped to
**pow**.
Thus, the numerical accuracy is at most that of the 53-bit double
precision implementation.

These functions conform to
ISO/IEC 9899:1999 ("ISO C99").

EXP (3) | December 8, 2017 |

Main index | Section 3 | 日本語 | Options |

Please direct any comments about this manual page service to Ben Bullock. Privacy policy.

“ | Never write it in C if you can do it in `awk'; Never do it in `awk' if `sed' can handle it; Never use `sed' when `tr' can do the job; Never invoke `tr' when `cat' is sufficient; Avoid using `cat' whenever possible. |
” |

— Taylor's Laws of Programming |