xref: /freebsd/lib/msun/man/exp.3 (revision cb166ce422ac2bc81f42c2a2e2cd68625c11478d)
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 July 31, 1991
36.Dt EXP 3
37.Os BSD 4
38.Sh NAME
39.Nm exp ,
40.Nm expf ,
41.Nm exp2 ,
42.Nm exp2f ,
43.Nm exp10 ,
44.Nm exp10f ,
45.Nm expm1 ,
46.Nm expm1f ,
47.Nm log ,
48.Nm logf ,
49.Nm log10 ,
50.Nm log10f ,
51.Nm log1p ,
52.Nm log1pf ,
53.Nm pow ,
54.Nm powf
55.Nd exponential, logarithm, power functions
56.Sh SYNOPSIS
57.Fd #include <math.h>
58.Ft double
59.Fn exp "double x"
60.Ft float
61.Fn expf "float x"
62.Ft double
63.Fn expm1 "double x"
64.Ft float
65.Fn expm1f "float x"
66.Ft double
67.Fn log "double x"
68.Ft float
69.Fn logf "float x"
70.Ft double
71.Fn log10 "double x"
72.Ft float
73.Fn log10f "float x"
74.Ft double
75.Fn log1p "double x"
76.Ft float
77.Fn log1pf "float x"
78.Ft double
79.Fn pow "double x" "double y"
80.Ft float
81.Fn powf "float x" "float y"
82.Sh DESCRIPTION
83The
84.Fn exp
85and the
86.Fn expf
87functions compute the exponential value of the given argument
88.Fa x .
89.Pp
90The
91.Fn expm1
92and the
93.Fn expm1f
94functions compute the value exp(x)\-1 accurately even for tiny argument
95.Fa x .
96.Pp
97The
98.Fn log
99and the
100.Fn logf
101functions compute the value of the natural logarithm of argument
102.Fa x.
103.Pp
104The
105.Fn log10
106and the
107.Fn log10f
108functions compute the value of the logarithm of argument
109.Fa x
110to base 10.
111.Pp
112The
113.Fn log1p
114and the
115.Fn log1pf
116functions compute
117the value of log(1+x) accurately even for tiny argument
118.Fa x .
119.Pp
120The
121.Fn pow
122and the
123.Fn powf
124functions compute the value
125of
126.Ar x
127to the exponent
128.Ar y .
129.Sh ERROR (due to Roundoff etc.)
130.Fn exp x ,
131.Fn log x ,
132.Fn expm1 x
133and
134.Fn log1p x
135are accurate to within
136an
137.Em ulp ,
138and
139.Fn log10 x
140to within about 2
141.Em ulps ;
142an
143.Em ulp
144is one
145.Em Unit
146in the
147.Em Last
148.Em Place .
149The error in
150.Fn pow x y
151is below about 2
152.Em ulps
153when its
154magnitude is moderate, but increases as
155.Fn pow x y
156approaches
157the over/underflow thresholds until almost as many bits could be
158lost as are occupied by the floating\-point format's exponent
159field; that is 8 bits for
160.Tn "VAX D"
161and 11 bits for IEEE 754 Double.
162No such drastic loss has been exposed by testing; the worst
163errors observed have been below 20
164.Em ulps
165for
166.Tn "VAX D" ,
167300
168.Em ulps
169for
170.Tn IEEE
171754 Double.
172Moderate values of
173.Fn pow
174are accurate enough that
175.Fn pow integer integer
176is exact until it is bigger than 2**56 on a
177.Tn VAX ,
1782**53 for
179.Tn IEEE
180754.
181.Sh RETURN VALUES
182These functions will return the appropriate computation unless an error
183occurs or an argument is out of range.
184The functions
185.Fn exp ,
186.Fn expm1 ,
187.Fn pow
188detect if the computed value will overflow,
189set the global variable
190.Va errno to
191.Er ERANGE
192and cause a reserved operand fault on a
193.Tn VAX
194or
195.Tn Tahoe .
196The functions
197.Fn pow x y
198checks to see if
199.Fa x
200< 0 and
201.Fa y
202is not an integer, in the event this is true,
203the global variable
204.Va errno
205is set to
206.Er EDOM
207and on the
208.Tn VAX
209and
210.Tn Tahoe
211generate a reserved operand fault.
212On a
213.Tn VAX
214and
215.Tn Tahoe ,
216.Va errno
217is set to
218.Er EDOM
219and the reserved operand is returned
220by log unless
221.Fa x
222> 0, by
223.Fn log1p
224unless
225.Fa x
226> \-1.
227.Sh NOTES
228The functions exp(x)\-1 and log(1+x) are called
229expm1 and logp1 in
230.Tn BASIC
231on the Hewlett\-Packard
232.Tn HP Ns \-71B
233and
234.Tn APPLE
235Macintosh,
236.Tn EXP1
237and
238.Tn LN1
239in Pascal, exp1 and log1 in C
240on
241.Tn APPLE
242Macintoshes, where they have been provided to make
243sure financial calculations of ((1+x)**n\-1)/x, namely
244expm1(n\(**log1p(x))/x, will be accurate when x is tiny.
245They also provide accurate inverse hyperbolic functions.
246.Pp
247The function
248.Fn pow x 0
249returns x**0 = 1 for all x including x = 0,
250.if n \
251Infinity
252.if t \
253\(if
254(not found on a
255.Tn VAX ) ,
256and
257.Em NaN
258(the reserved
259operand on a
260.Tn VAX ) .  Previous implementations of pow may
261have defined x**0 to be undefined in some or all of these
262cases.  Here are reasons for returning x**0 = 1 always:
263.Bl -enum -width indent
264.It
265Any program that already tests whether x is zero (or
266infinite or \*(Na) before computing x**0 cannot care
267whether 0**0 = 1 or not. Any program that depends
268upon 0**0 to be invalid is dubious anyway since that
269expression's meaning and, if invalid, its consequences
270vary from one computer system to another.
271.It
272Some Algebra texts (e.g. Sigler's) define x**0 = 1 for
273all x, including x = 0.
274This is compatible with the convention that accepts a[0]
275as the value of polynomial
276.Bd -literal -offset indent
277p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n
278.Ed
279.Pp
280at x = 0 rather than reject a[0]\(**0**0 as invalid.
281.It
282Analysts will accept 0**0 = 1 despite that x**y can
283approach anything or nothing as x and y approach 0
284independently.
285The reason for setting 0**0 = 1 anyway is this:
286.Bd -filled -offset indent
287If x(z) and y(z) are
288.Em any
289functions analytic (expandable
290in power series) in z around z = 0, and if there
291x(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0.
292.Ed
293.It
294If 0**0 = 1, then
295.if n \
296infinity**0 = 1/0**0 = 1 too; and
297.if t \
298\(if**0 = 1/0**0 = 1 too; and
299then \*(Na**0 = 1 too because x**0 = 1 for all finite
300and infinite x, i.e., independently of x.
301.El
302.Sh SEE ALSO
303.Xr math 3
304.Sh HISTORY
305A
306.Fn exp ,
307.Fn log
308and
309.Fn pow
310functions
311appeared in
312.At v6 .
313A
314.Fn log10
315function
316appeared in
317.At v7 .
318The
319.Fn log1p
320and
321.Fn expm1
322functions appeared in
323.Bx 4.3 .
324