.\" Copyright (c) 1985, 1991 Regents of the University of California. | |

.\" All rights reserved. | |

.\" | |

.\" Redistribution and use in source and binary forms, with or without | |

.\" modification, are permitted provided that the following conditions | |

.\" are met: | |

.\" 1. Redistributions of source code must retain the above copyright | |

.\" notice, this list of conditions and the following disclaimer. | |

.\" 2. Redistributions in binary form must reproduce the above copyright | |

.\" notice, this list of conditions and the following disclaimer in the | |

.\" documentation and/or other materials provided with the distribution. | |

.\" 3. All advertising materials mentioning features or use of this software | |

.\" must display the following acknowledgement: | |

.\" This product includes software developed by the University of | |

.\" California, Berkeley and its contributors. | |

.\" 4. Neither the name of the University nor the names of its contributors | |

.\" may be used to endorse or promote products derived from this software | |

.\" without specific prior written permission. | |

.\" | |

.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |

.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |

.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |

.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |

.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |

.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |

.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |

.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |

.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |

.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |

.\" SUCH DAMAGE. | |

.\" | |

.\" from: @(#)exp.3 6.12 (Berkeley) 7/31/91 | |

.\" $FreeBSD: src/lib/msun/man/exp.3,v 1.22 2005/04/05 02:57:28 das Exp $ | |

.\" | |

.Dd April 5, 2005 | |

.Dt EXP 3 | |

.Os | |

.Sh NAME | |

.Nm exp , | |

.Nm expf , | |

.\" The sorting error is intentional. exp and expf should be adjacent. | |

.Nm exp2 , | |

.Nm exp2f , | |

.Nm expm1 , | |

.Nm expm1f , | |

.Nm log , | |

.Nm logf , | |

.Nm log10 , | |

.Nm log10f , | |

.Nm log1p , | |

.Nm log1pf , | |

.Nm pow , | |

.Nm powf | |

.Nd exponential, logarithm, power functions | |

.Sh LIBRARY | |

.Lb libm | |

.Sh SYNOPSIS | |

.In math.h | |

.Ft double | |

.Fn exp "double x" | |

.Ft float | |

.Fn expf "float x" | |

.Ft double | |

.Fn exp2 "double x" | |

.Ft float | |

.Fn exp2f "float x" | |

.Ft double | |

.Fn expm1 "double x" | |

.Ft float | |

.Fn expm1f "float x" | |

.Ft double | |

.Fn log "double x" | |

.Ft float | |

.Fn logf "float x" | |

.Ft double | |

.Fn log10 "double x" | |

.Ft float | |

.Fn log10f "float x" | |

.Ft double | |

.Fn log1p "double x" | |

.Ft float | |

.Fn log1pf "float x" | |

.Ft double | |

.Fn pow "double x" "double y" | |

.Ft float | |

.Fn powf "float x" "float y" | |

.Sh DESCRIPTION | |

The | |

.Fn exp | |

and the | |

.Fn expf | |

functions compute the base | |

.Ms e | |

exponential value of the given argument | |

.Fa x . | |

.Pp | |

The | |

.Fn exp2 | |

and the | |

.Fn exp2f | |

functions compute the base 2 exponential of the given argument | |

.Fa x . | |

.Pp | |

The | |

.Fn expm1 | |

and the | |

.Fn expm1f | |

functions compute the value exp(x)\-1 accurately even for tiny argument | |

.Fa x . | |

.Pp | |

The | |

.Fn log | |

and the | |

.Fn logf | |

functions compute the value of the natural logarithm of argument | |

.Fa x . | |

.Pp | |

The | |

.Fn log10 | |

and the | |

.Fn log10f | |

functions compute the value of the logarithm of argument | |

.Fa x | |

to base 10. | |

.Pp | |

The | |

.Fn log1p | |

and the | |

.Fn log1pf | |

functions compute | |

the value of log(1+x) accurately even for tiny argument | |

.Fa x . | |

.Pp | |

The | |

.Fn pow | |

and the | |

.Fn powf | |

functions compute the value | |

of | |

.Ar x | |

to the exponent | |

.Ar y . | |

.Sh ERROR (due to Roundoff etc.) | |

The values of | |

.Fn exp 0 , | |

.Fn expm1 0 , | |

.Fn exp2 integer , | |

and | |

.Fn pow integer integer | |

are exact provided that they are representable. | |

.\" XXX Is this really true for pow()? | |

Otherwise the error in these functions is generally below one | |

.Em ulp . | |

.Sh RETURN VALUES | |

These functions will return the appropriate computation unless an error | |

occurs or an argument is out of range. | |

The functions | |

.Fn pow x y | |

and | |

.Fn powf x y | |

raise an invalid exception and return an \*(Na if | |

.Fa x | |

< 0 and | |

.Fa y | |

is not an integer. | |

An attempt to take the logarithm of \*(Pm0 will result in | |

a divide-by-zero exception, and an infinity will be returned. | |

An attempt to take the logarithm of a negative number will | |

result in an invalid exception, and an \*(Na will be generated. | |

.Sh NOTES | |

The functions exp(x)\-1 and log(1+x) are called | |

expm1 and logp1 in | |

.Tn BASIC | |

on the Hewlett\-Packard | |

.Tn HP Ns \-71B | |

and | |

.Tn APPLE | |

Macintosh, | |

.Tn EXP1 | |

and | |

.Tn LN1 | |

in Pascal, exp1 and log1 in C | |

on | |

.Tn APPLE | |

Macintoshes, where they have been provided to make | |

sure financial calculations of ((1+x)**n\-1)/x, namely | |

expm1(n\(**log1p(x))/x, will be accurate when x is tiny. | |

They also provide accurate inverse hyperbolic functions. | |

.Pp | |

The function | |

.Fn pow x 0 | |

returns x**0 = 1 for all x including x = 0, \*(If, and \*(Na . | |

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: | |

.Bl -enum -width indent | |

.It | |

Any program that already tests whether x is zero (or | |

infinite or \*(Na) 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. | |

.It | |

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 | |

.Bd -literal -offset indent | |

p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n | |

.Ed | |

.Pp | |

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

.It | |

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: | |

.Bd -ragged -offset indent | |

If x(z) and y(z) are | |

.Em 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. | |

.Ed | |

.It | |

If 0**0 = 1, then | |

\*(If**0 = 1/0**0 = 1 too; and | |

then \*(Na**0 = 1 too because x**0 = 1 for all finite | |

and infinite x, i.e., independently of x. | |

.El | |

.Sh SEE ALSO | |

.Xr fenv 3 , | |

.Xr math 3 |