237 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" 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
 |