xref: /freebsd/lib/msun/man/exp.3 (revision ca9ac06c99bfd0150b85d4d83c396ce6237c0e05)
1.\" Copyright (c) 1985, 1991 Regents of the University of California.
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\"    must display the following acknowledgement:
14.\"	This product includes software developed by the University of
15.\"	California, Berkeley and its contributors.
16.\" 4. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"     from: @(#)exp.3	6.12 (Berkeley) 7/31/91
33.\" $FreeBSD$
34.\"
35.Dd January 14, 2005
36.Dt EXP 3
37.Os
38.Sh NAME
39.Nm exp ,
40.Nm expf ,
41.Nm expm1 ,
42.Nm expm1f ,
43.Nm log ,
44.Nm logf ,
45.Nm log10 ,
46.Nm log10f ,
47.Nm log1p ,
48.Nm log1pf ,
49.Nm pow ,
50.Nm powf
51.Nd exponential, logarithm, power functions
52.Sh LIBRARY
53.Lb libm
54.Sh SYNOPSIS
55.In math.h
56.Ft double
57.Fn exp "double x"
58.Ft float
59.Fn expf "float x"
60.Ft double
61.Fn expm1 "double x"
62.Ft float
63.Fn expm1f "float x"
64.Ft double
65.Fn log "double x"
66.Ft float
67.Fn logf "float x"
68.Ft double
69.Fn log10 "double x"
70.Ft float
71.Fn log10f "float x"
72.Ft double
73.Fn log1p "double x"
74.Ft float
75.Fn log1pf "float x"
76.Ft double
77.Fn pow "double x" "double y"
78.Ft float
79.Fn powf "float x" "float y"
80.Sh DESCRIPTION
81The
82.Fn exp
83and the
84.Fn expf
85functions compute the exponential value of the given argument
86.Fa x .
87.Pp
88The
89.Fn expm1
90and the
91.Fn expm1f
92functions compute the value exp(x)\-1 accurately even for tiny argument
93.Fa x .
94.Pp
95The
96.Fn log
97and the
98.Fn logf
99functions compute the value of the natural logarithm of argument
100.Fa x .
101.Pp
102The
103.Fn log10
104and the
105.Fn log10f
106functions compute the value of the logarithm of argument
107.Fa x
108to base 10.
109.Pp
110The
111.Fn log1p
112and the
113.Fn log1pf
114functions compute
115the value of log(1+x) accurately even for tiny argument
116.Fa x .
117.Pp
118The
119.Fn pow
120and the
121.Fn powf
122functions compute the value
123of
124.Ar x
125to the exponent
126.Ar y .
127.Sh ERROR (due to Roundoff etc.)
128.Fn exp x ,
129.Fn log x ,
130.Fn expm1 x
131and
132.Fn log1p x
133are accurate to within
134an
135.Em ulp ,
136and
137.Fn log10 x
138to within about 2
139.Em ulps ;
140an
141.Em ulp
142is one
143.Em Unit
144in the
145.Em Last
146.Em Place .
147The error in
148.Fn pow x y
149is below about 2
150.Em ulps
151when its
152magnitude is moderate, but increases as
153.Fn pow x y
154approaches
155the over/underflow thresholds until almost as many bits could be
156lost as are occupied by the floating\-point format's exponent
157field; that is 8 bits for
158.Tn "VAX D"
159and 11 bits for IEEE 754 Double.
160No such drastic loss has been exposed by testing; the worst
161errors observed have been below 20
162.Em ulps
163for
164.Tn "VAX D" ,
165300
166.Em ulps
167for
168.Tn IEEE
169754 Double.
170Moderate values of
171.Fn pow
172are accurate enough that
173.Fn pow integer integer
174is exact until it is bigger than 2**56 on a
175.Tn VAX ,
1762**53 for
177.Tn IEEE
178754.
179.Sh RETURN VALUES
180These functions will return the appropriate computation unless an error
181occurs or an argument is out of range.
182The functions
183.Fn pow x y
184and
185.Fn powf x y
186raise an invalid exception and return an \*(Na if
187.Fa x
188< 0 and
189.Fa y
190is not an integer.
191An attempt to take the logarithm of \*(Pm0 will result in
192a divide-by-zero exception, and an infinity will be returned.
193An attempt to take the logarithm of a negative number will
194result in an invalid exception, and an \*(Na will be generated.
195.Sh NOTES
196The functions exp(x)\-1 and log(1+x) are called
197expm1 and logp1 in
198.Tn BASIC
199on the Hewlett\-Packard
200.Tn HP Ns \-71B
201and
202.Tn APPLE
203Macintosh,
204.Tn EXP1
205and
206.Tn LN1
207in Pascal, exp1 and log1 in C
208on
209.Tn APPLE
210Macintoshes, where they have been provided to make
211sure financial calculations of ((1+x)**n\-1)/x, namely
212expm1(n\(**log1p(x))/x, will be accurate when x is tiny.
213They also provide accurate inverse hyperbolic functions.
214.Pp
215The function
216.Fn pow x 0
217returns x**0 = 1 for all x including x = 0,
218\*(If
219(not found on a
220.Tn VAX ) ,
221and
222.Em NaN
223(the reserved
224operand on a
225.Tn VAX ) .
226Previous implementations of pow may
227have defined x**0 to be undefined in some or all of these
228cases.
229Here are reasons for returning x**0 = 1 always:
230.Bl -enum -width indent
231.It
232Any program that already tests whether x is zero (or
233infinite or \*(Na) before computing x**0 cannot care
234whether 0**0 = 1 or not.
235Any program that depends
236upon 0**0 to be invalid is dubious anyway since that
237expression's meaning and, if invalid, its consequences
238vary from one computer system to another.
239.It
240Some Algebra texts (e.g.\& Sigler's) define x**0 = 1 for
241all x, including x = 0.
242This is compatible with the convention that accepts a[0]
243as the value of polynomial
244.Bd -literal -offset indent
245p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n
246.Ed
247.Pp
248at x = 0 rather than reject a[0]\(**0**0 as invalid.
249.It
250Analysts will accept 0**0 = 1 despite that x**y can
251approach anything or nothing as x and y approach 0
252independently.
253The reason for setting 0**0 = 1 anyway is this:
254.Bd -ragged -offset indent
255If x(z) and y(z) are
256.Em any
257functions analytic (expandable
258in power series) in z around z = 0, and if there
259x(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0.
260.Ed
261.It
262If 0**0 = 1, then
263\*(If**0 = 1/0**0 = 1 too; and
264then \*(Na**0 = 1 too because x**0 = 1 for all finite
265and infinite x, i.e., independently of x.
266.El
267.Sh SEE ALSO
268.Xr fenv 3 ,
269.Xr math 3
270.Sh HISTORY
271A
272.Fn exp ,
273.Fn log
274and
275.Fn pow
276functions
277appeared in
278.At v6 .
279A
280.Fn log10
281function
282appeared in
283.At v7 .
284The
285.Fn log1p
286and
287.Fn expm1
288functions appeared in
289.Bx 4.3 .
290