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