386 lines
7.6 KiB
Groff
386 lines
7.6 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. 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.24 2008/01/18 21:43:00 das Exp $
|
||
|
.\" $NetBSD: exp.3,v 1.26 2010/05/03 05:35:58 jruoho Exp $
|
||
|
.\"
|
||
|
.Dd May 3, 2010
|
||
|
.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 exp2l ,
|
||
|
.Nm expm1 ,
|
||
|
.Nm expm1f ,
|
||
|
.Nm log ,
|
||
|
.Nm logf ,
|
||
|
.Nm log2 ,
|
||
|
.Nm log2f ,
|
||
|
.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 long double
|
||
|
.\" .Fn exp2l "long double 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 log2 "double x"
|
||
|
.Ft float
|
||
|
.Fn log2f "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
|
||
|
.Fn exp2f
|
||
|
.\" .Fn exp2f ,
|
||
|
.\" and
|
||
|
.\" .Fn exp2l
|
||
|
functions compute the base 2 exponential of the given argument
|
||
|
.Fa x .
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn expm1
|
||
|
and the
|
||
|
.Fn expm1f
|
||
|
functions computes the value exp(x)\-1 accurately even for tiny argument
|
||
|
.Fa x .
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn log
|
||
|
function computes the value of the natural logarithm of argument
|
||
|
.Fa x .
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn log10
|
||
|
function computes the value of the logarithm of argument
|
||
|
.Fa x
|
||
|
to base 10.
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn log1p
|
||
|
function computes
|
||
|
the value of log(1+x) accurately even for tiny argument
|
||
|
.Fa x .
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn log2
|
||
|
and the
|
||
|
.Fn log2f
|
||
|
functions compute the value of the logarithm of argument
|
||
|
.Fa x
|
||
|
to base 2.
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn pow
|
||
|
and
|
||
|
.Fn powf
|
||
|
functions compute the value
|
||
|
of
|
||
|
.Ar x
|
||
|
to the exponent
|
||
|
.Ar y .
|
||
|
.Sh RETURN VALUES
|
||
|
These functions will return the appropriate computation unless an error
|
||
|
occurs or an argument is out of range.
|
||
|
The functions
|
||
|
.Fn exp ,
|
||
|
.Fn expm1
|
||
|
and
|
||
|
.Fn pow
|
||
|
detect if the computed value will overflow,
|
||
|
set the global variable
|
||
|
.Va errno
|
||
|
to
|
||
|
.Er ERANGE
|
||
|
and cause a reserved operand fault on a
|
||
|
.Tn VAX .
|
||
|
The function
|
||
|
.Fn pow x y
|
||
|
checks to see if
|
||
|
.Fa x
|
||
|
\*[Lt] 0 and
|
||
|
.Fa y
|
||
|
is not an integer, in the event this is true,
|
||
|
the global variable
|
||
|
.Va errno
|
||
|
is set to
|
||
|
.Er EDOM
|
||
|
and on the
|
||
|
.Tn VAX
|
||
|
generate a reserved operand fault.
|
||
|
On a
|
||
|
.Tn VAX ,
|
||
|
.Va errno
|
||
|
is set to
|
||
|
.Er EDOM
|
||
|
and the reserved operand is returned
|
||
|
by log unless
|
||
|
.Fa x
|
||
|
\*[Gt] 0, by
|
||
|
.Fn log1p
|
||
|
unless
|
||
|
.Fa x
|
||
|
\*[Gt] \-1.
|
||
|
.Sh ERRORS
|
||
|
The values of
|
||
|
.Fn exp x ,
|
||
|
.Fn expm1 x ,
|
||
|
.Fn exp2 x ,
|
||
|
.Fn log x ,
|
||
|
and
|
||
|
.Fn log1p x ,
|
||
|
are exact provided that they are representable.
|
||
|
Otherwise the error in these functions is generally below one
|
||
|
.Em ulp .
|
||
|
The values of
|
||
|
.Fn log10 x
|
||
|
are within about 2
|
||
|
.Em ulps ;
|
||
|
an
|
||
|
.Em ulp
|
||
|
is one
|
||
|
.Em Unit
|
||
|
in the
|
||
|
.Em Last
|
||
|
.Em Place .
|
||
|
The error in
|
||
|
.Fn pow x y
|
||
|
is below about 2
|
||
|
.Em ulps
|
||
|
when its
|
||
|
magnitude is moderate, but increases as
|
||
|
.Fn pow x y
|
||
|
approaches
|
||
|
the over/underflow thresholds until almost as many bits could be
|
||
|
lost as are occupied by the floating\-point format's exponent
|
||
|
field; that is 8 bits for
|
||
|
.Tn "VAX D"
|
||
|
and 11 bits for IEEE 754 Double.
|
||
|
No such drastic loss has been exposed by testing; the worst
|
||
|
errors observed have been below 20
|
||
|
.Em ulps
|
||
|
for
|
||
|
.Tn "VAX D" ,
|
||
|
300
|
||
|
.Em ulps
|
||
|
for
|
||
|
.Tn IEEE
|
||
|
754 Double.
|
||
|
Moderate values of
|
||
|
.Fn pow x y
|
||
|
are accurate enough that
|
||
|
.Fn pow integer integer
|
||
|
is exact until it is bigger than 2**56 on a
|
||
|
.Tn VAX ,
|
||
|
2**53 for
|
||
|
.Tn IEEE
|
||
|
754.
|
||
|
.Sh NOTES
|
||
|
The functions
|
||
|
.Fn exp x\ \-\ 1
|
||
|
and
|
||
|
.Fn log 1\ \+\ x
|
||
|
are called
|
||
|
.Fn expm1 x
|
||
|
and
|
||
|
.Fn logp1 x
|
||
|
in
|
||
|
.Tn BASIC
|
||
|
on the Hewlett\-Packard
|
||
|
.Tn HP Ns \-71B
|
||
|
and
|
||
|
.Tn APPLE
|
||
|
Macintosh,
|
||
|
.Tn EXP1
|
||
|
and
|
||
|
.Tn LN1
|
||
|
in Pascal,
|
||
|
.Fn exp1 x
|
||
|
and
|
||
|
.Fn log1 x
|
||
|
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 n \
|
||
|
Infinity
|
||
|
.if t \
|
||
|
\(if
|
||
|
(not found on a
|
||
|
.Tn VAX ) ,
|
||
|
and
|
||
|
.Em NaN
|
||
|
(the reserved
|
||
|
operand on a
|
||
|
.Tn VAX ) .
|
||
|
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 -filled -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) \(-\*[Gt] 1 as z \(-\*[Gt] 0.
|
||
|
.Ed
|
||
|
.It
|
||
|
If 0**0 = 1, then
|
||
|
.if n \
|
||
|
infinity**0 = 1/0**0 = 1 too; and
|
||
|
.if t \
|
||
|
\(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 math 3
|
||
|
.Sh STANDARDS
|
||
|
The
|
||
|
.Fn exp ,
|
||
|
.Fn log ,
|
||
|
.Fn log10
|
||
|
and
|
||
|
.Fn pow
|
||
|
functions conform to
|
||
|
.St -ansiC .
|
||
|
The
|
||
|
.Fn exp2 ,
|
||
|
.Fn exp2f ,
|
||
|
.Fn expf ,
|
||
|
.Fn expm1 ,
|
||
|
.Fn expm1f ,
|
||
|
.Fn log1p ,
|
||
|
.Fn log1pf ,
|
||
|
.Fn log2 ,
|
||
|
.Fn log2f ,
|
||
|
.Fn log10f ,
|
||
|
.Fn logf ,
|
||
|
and
|
||
|
.Fn powf
|
||
|
functions conform to
|
||
|
.St -isoC-99 .
|
||
|
.Sh HISTORY
|
||
|
A
|
||
|
.Fn exp ,
|
||
|
.Fn log
|
||
|
and
|
||
|
.Fn pow
|
||
|
functions
|
||
|
appeared in
|
||
|
.At v6 .
|
||
|
A
|
||
|
.Fn log10
|
||
|
function
|
||
|
appeared in
|
||
|
.At v7 .
|
||
|
The
|
||
|
.Fn log1p
|
||
|
and
|
||
|
.Fn expm1
|
||
|
functions appeared in
|
||
|
.Bx 4.3 .
|