xref: /dflybsd-src/contrib/openbsd_libm/man/exp.3 (revision 4382f29d99a100bd77a81697c2f699c11f6a472a)
1*05a0b428SJohn Marino.\"	$OpenBSD: exp.3,v 1.29 2015/01/15 19:06:31 schwarze Exp $
2*05a0b428SJohn Marino.\"
3*05a0b428SJohn Marino.\" Copyright (c) 1985, 1991 Regents of the University of California.
4*05a0b428SJohn Marino.\" All rights reserved.
5*05a0b428SJohn Marino.\"
6*05a0b428SJohn Marino.\" Redistribution and use in source and binary forms, with or without
7*05a0b428SJohn Marino.\" modification, are permitted provided that the following conditions
8*05a0b428SJohn Marino.\" are met:
9*05a0b428SJohn Marino.\" 1. Redistributions of source code must retain the above copyright
10*05a0b428SJohn Marino.\"    notice, this list of conditions and the following disclaimer.
11*05a0b428SJohn Marino.\" 2. Redistributions in binary form must reproduce the above copyright
12*05a0b428SJohn Marino.\"    notice, this list of conditions and the following disclaimer in the
13*05a0b428SJohn Marino.\"    documentation and/or other materials provided with the distribution.
14*05a0b428SJohn Marino.\" 3. Neither the name of the University nor the names of its contributors
15*05a0b428SJohn Marino.\"    may be used to endorse or promote products derived from this software
16*05a0b428SJohn Marino.\"    without specific prior written permission.
17*05a0b428SJohn Marino.\"
18*05a0b428SJohn Marino.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19*05a0b428SJohn Marino.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*05a0b428SJohn Marino.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*05a0b428SJohn Marino.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22*05a0b428SJohn Marino.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*05a0b428SJohn Marino.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*05a0b428SJohn Marino.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*05a0b428SJohn Marino.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*05a0b428SJohn Marino.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*05a0b428SJohn Marino.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*05a0b428SJohn Marino.\" SUCH DAMAGE.
29*05a0b428SJohn Marino.\"
30*05a0b428SJohn Marino.\"     from: @(#)exp.3	6.12 (Berkeley) 7/31/91
31*05a0b428SJohn Marino.\"
32*05a0b428SJohn Marino.Dd $Mdocdate: January 15 2015 $
33*05a0b428SJohn Marino.Dt EXP 3
34*05a0b428SJohn Marino.Os
35*05a0b428SJohn Marino.Sh NAME
36*05a0b428SJohn Marino.Nm exp ,
37*05a0b428SJohn Marino.Nm expf ,
38*05a0b428SJohn Marino.Nm expl ,
39*05a0b428SJohn Marino.Nm exp2 ,
40*05a0b428SJohn Marino.Nm exp2f ,
41*05a0b428SJohn Marino.Nm exp2l ,
42*05a0b428SJohn Marino.Nm expm1 ,
43*05a0b428SJohn Marino.Nm expm1f ,
44*05a0b428SJohn Marino.Nm expm1l ,
45*05a0b428SJohn Marino.Nm log ,
46*05a0b428SJohn Marino.Nm logf ,
47*05a0b428SJohn Marino.Nm logl ,
48*05a0b428SJohn Marino.Nm log2 ,
49*05a0b428SJohn Marino.Nm log2f ,
50*05a0b428SJohn Marino.Nm log2l ,
51*05a0b428SJohn Marino.Nm log10 ,
52*05a0b428SJohn Marino.Nm log10f ,
53*05a0b428SJohn Marino.Nm log10l ,
54*05a0b428SJohn Marino.Nm log1p ,
55*05a0b428SJohn Marino.Nm log1pf ,
56*05a0b428SJohn Marino.Nm log1pl ,
57*05a0b428SJohn Marino.Nm pow ,
58*05a0b428SJohn Marino.Nm powf ,
59*05a0b428SJohn Marino.Nm powl
60*05a0b428SJohn Marino.Nd exponential, logarithm, power functions
61*05a0b428SJohn Marino.Sh SYNOPSIS
62*05a0b428SJohn Marino.In math.h
63*05a0b428SJohn Marino.Ft double
64*05a0b428SJohn Marino.Fn exp "double x"
65*05a0b428SJohn Marino.Ft float
66*05a0b428SJohn Marino.Fn expf "float x"
67*05a0b428SJohn Marino.Ft long double
68*05a0b428SJohn Marino.Fn expl "long double x"
69*05a0b428SJohn Marino.Ft double
70*05a0b428SJohn Marino.Fn exp2 "double x"
71*05a0b428SJohn Marino.Ft float
72*05a0b428SJohn Marino.Fn exp2f "float x"
73*05a0b428SJohn Marino.Ft long double
74*05a0b428SJohn Marino.Fn exp2l "long double x"
75*05a0b428SJohn Marino.Ft double
76*05a0b428SJohn Marino.Fn expm1 "double x"
77*05a0b428SJohn Marino.Ft float
78*05a0b428SJohn Marino.Fn expm1f "float x"
79*05a0b428SJohn Marino.Ft long double
80*05a0b428SJohn Marino.Fn expm1l "long double x"
81*05a0b428SJohn Marino.Ft double
82*05a0b428SJohn Marino.Fn log "double x"
83*05a0b428SJohn Marino.Ft float
84*05a0b428SJohn Marino.Fn logf "float x"
85*05a0b428SJohn Marino.Ft long double
86*05a0b428SJohn Marino.Fn logl "long double x"
87*05a0b428SJohn Marino.Ft double
88*05a0b428SJohn Marino.Fn log2 "double x"
89*05a0b428SJohn Marino.Ft float
90*05a0b428SJohn Marino.Fn log2f "float x"
91*05a0b428SJohn Marino.Ft long double
92*05a0b428SJohn Marino.Fn log2l "long double x"
93*05a0b428SJohn Marino.Ft double
94*05a0b428SJohn Marino.Fn log10 "double x"
95*05a0b428SJohn Marino.Ft float
96*05a0b428SJohn Marino.Fn log10f "float x"
97*05a0b428SJohn Marino.Ft long double
98*05a0b428SJohn Marino.Fn log10l "long double x"
99*05a0b428SJohn Marino.Ft double
100*05a0b428SJohn Marino.Fn log1p "double x"
101*05a0b428SJohn Marino.Ft float
102*05a0b428SJohn Marino.Fn log1pf "float x"
103*05a0b428SJohn Marino.Ft long double
104*05a0b428SJohn Marino.Fn log1pl "long double x"
105*05a0b428SJohn Marino.Ft double
106*05a0b428SJohn Marino.Fn pow "double x" "double y"
107*05a0b428SJohn Marino.Ft float
108*05a0b428SJohn Marino.Fn powf "float x" "float y"
109*05a0b428SJohn Marino.Ft long double
110*05a0b428SJohn Marino.Fn powl "long double x" "long double y"
111*05a0b428SJohn Marino.Sh DESCRIPTION
112*05a0b428SJohn MarinoThe
113*05a0b428SJohn Marino.Fn exp
114*05a0b428SJohn Marinofunction computes the base
115*05a0b428SJohn Marino.Ms e
116*05a0b428SJohn Marinoexponential value of the given argument
117*05a0b428SJohn Marino.Fa x .
118*05a0b428SJohn MarinoThe
119*05a0b428SJohn Marino.Fn expf
120*05a0b428SJohn Marinofunction is a single precision version of
121*05a0b428SJohn Marino.Fn exp .
122*05a0b428SJohn MarinoThe
123*05a0b428SJohn Marino.Fn expl
124*05a0b428SJohn Marinofunction is an extended precision version of
125*05a0b428SJohn Marino.Fn exp .
126*05a0b428SJohn Marino.Pp
127*05a0b428SJohn MarinoThe
128*05a0b428SJohn Marino.Fn exp2
129*05a0b428SJohn Marinofunction computes the base 2 exponential of the given argument
130*05a0b428SJohn Marino.Fa x .
131*05a0b428SJohn MarinoThe
132*05a0b428SJohn Marino.Fn exp2f
133*05a0b428SJohn Marinofunction is a single precision version of
134*05a0b428SJohn Marino.Fn exp2 .
135*05a0b428SJohn MarinoThe
136*05a0b428SJohn Marino.Fn exp2l
137*05a0b428SJohn Marinofunction is an extended precision version of
138*05a0b428SJohn Marino.Fn exp2 .
139*05a0b428SJohn Marino.Pp
140*05a0b428SJohn MarinoThe
141*05a0b428SJohn Marino.Fn expm1
142*05a0b428SJohn Marinofunction computes the value exp(x)\-1 accurately even for tiny argument
143*05a0b428SJohn Marino.Fa x .
144*05a0b428SJohn MarinoThe
145*05a0b428SJohn Marino.Fn expm1f
146*05a0b428SJohn Marinofunction is a single precision version of
147*05a0b428SJohn Marino.Fn expm1 .
148*05a0b428SJohn MarinoThe
149*05a0b428SJohn Marino.Fn expm1l
150*05a0b428SJohn Marinofunction is an extended precision version of
151*05a0b428SJohn Marino.Fn expm1 .
152*05a0b428SJohn Marino.Pp
153*05a0b428SJohn MarinoThe
154*05a0b428SJohn Marino.Fn log
155*05a0b428SJohn Marinofunction computes the value of the natural logarithm of argument
156*05a0b428SJohn Marino.Fa x .
157*05a0b428SJohn MarinoThe
158*05a0b428SJohn Marino.Fn logf
159*05a0b428SJohn Marinofunction is a single precision version of
160*05a0b428SJohn Marino.Fn log .
161*05a0b428SJohn MarinoThe
162*05a0b428SJohn Marino.Fn logl
163*05a0b428SJohn Marinofunction is an extended precision version of
164*05a0b428SJohn Marino.Fn log .
165*05a0b428SJohn Marino.Pp
166*05a0b428SJohn MarinoThe
167*05a0b428SJohn Marino.Fn log2
168*05a0b428SJohn Marinofunction computes the value of the logarithm of argument
169*05a0b428SJohn Marino.Fa x
170*05a0b428SJohn Marinoto base 2.
171*05a0b428SJohn MarinoThe
172*05a0b428SJohn Marino.Fn log2f
173*05a0b428SJohn Marinofunction is a single precision version of
174*05a0b428SJohn Marino.Fn log2 .
175*05a0b428SJohn MarinoThe
176*05a0b428SJohn Marino.Fn log2l
177*05a0b428SJohn Marinofunction is an extended precision version of
178*05a0b428SJohn Marino.Fn log2 .
179*05a0b428SJohn Marino.Pp
180*05a0b428SJohn MarinoThe
181*05a0b428SJohn Marino.Fn log10
182*05a0b428SJohn Marinofunction computes the value of the logarithm of argument
183*05a0b428SJohn Marino.Fa x
184*05a0b428SJohn Marinoto base 10.
185*05a0b428SJohn MarinoThe
186*05a0b428SJohn Marino.Fn log10f
187*05a0b428SJohn Marinofunction is a single precision version of
188*05a0b428SJohn Marino.Fn log10 .
189*05a0b428SJohn MarinoThe
190*05a0b428SJohn Marino.Fn log10l
191*05a0b428SJohn Marinofunction is an extended precision version of
192*05a0b428SJohn Marino.Fn log10 .
193*05a0b428SJohn Marino.Pp
194*05a0b428SJohn MarinoThe
195*05a0b428SJohn Marino.Fn log1p
196*05a0b428SJohn Marinofunction computes
197*05a0b428SJohn Marinothe value of log(1+x) accurately even for tiny argument
198*05a0b428SJohn Marino.Fa x .
199*05a0b428SJohn MarinoThe
200*05a0b428SJohn Marino.Fn log1pf
201*05a0b428SJohn Marinofunction is a single precision version of
202*05a0b428SJohn Marino.Fn log1p .
203*05a0b428SJohn MarinoThe
204*05a0b428SJohn Marino.Fn log1pl
205*05a0b428SJohn Marinofunction is an extended precision version of
206*05a0b428SJohn Marino.Fn log1p .
207*05a0b428SJohn Marino.Pp
208*05a0b428SJohn MarinoThe
209*05a0b428SJohn Marino.Fn pow
210*05a0b428SJohn Marinofunction computes the value of
211*05a0b428SJohn Marino.Ar x
212*05a0b428SJohn Marinoto the exponent
213*05a0b428SJohn Marino.Ar y .
214*05a0b428SJohn MarinoThe
215*05a0b428SJohn Marino.Fn powf
216*05a0b428SJohn Marinofunction is a single precision version of
217*05a0b428SJohn Marino.Fn pow .
218*05a0b428SJohn MarinoThe
219*05a0b428SJohn Marino.Fn powl
220*05a0b428SJohn Marinofunction is an extended precision version of
221*05a0b428SJohn Marino.Fn pow .
222*05a0b428SJohn Marino.Sh RETURN VALUES
223*05a0b428SJohn MarinoThese functions will return the appropriate computation unless an error
224*05a0b428SJohn Marinooccurs or an argument is out of range.
225*05a0b428SJohn MarinoThe functions
226*05a0b428SJohn Marino.Fn exp ,
227*05a0b428SJohn Marino.Fn expm1
228*05a0b428SJohn Marinoand
229*05a0b428SJohn Marino.Fn pow
230*05a0b428SJohn Marinodetect if the computed value will overflow,
231*05a0b428SJohn Marinoset the global variable
232*05a0b428SJohn Marino.Va errno
233*05a0b428SJohn Marinoto
234*05a0b428SJohn Marino.Er ERANGE
235*05a0b428SJohn Marinoand cause a reserved operand fault on a VAX or Tahoe.
236*05a0b428SJohn MarinoThe function
237*05a0b428SJohn Marino.Fn pow x y
238*05a0b428SJohn Marinochecks to see if
239*05a0b428SJohn Marino.Fa x
240*05a0b428SJohn Marino< 0 and
241*05a0b428SJohn Marino.Fa y
242*05a0b428SJohn Marinois not an integer, in the event this is true,
243*05a0b428SJohn Marinothe global variable
244*05a0b428SJohn Marino.Va errno
245*05a0b428SJohn Marinois set to
246*05a0b428SJohn Marino.Er EDOM
247*05a0b428SJohn Marinoand on the VAX and Tahoe generate a reserved operand fault.
248*05a0b428SJohn MarinoOn a VAX and Tahoe,
249*05a0b428SJohn Marino.Va errno
250*05a0b428SJohn Marinois set to
251*05a0b428SJohn Marino.Er EDOM
252*05a0b428SJohn Marinoand the reserved operand is returned
253*05a0b428SJohn Marinoby log unless
254*05a0b428SJohn Marino.Fa x
255*05a0b428SJohn Marino> 0, by
256*05a0b428SJohn Marino.Fn log1p
257*05a0b428SJohn Marinounless
258*05a0b428SJohn Marino.Fa x
259*05a0b428SJohn Marino> \-1.
260*05a0b428SJohn Marino.Sh ERRORS (due to Roundoff etc.)
261*05a0b428SJohn Marinoexp(x), log(x), expm1(x) and log1p(x) are accurate to within
262*05a0b428SJohn Marinoan
263*05a0b428SJohn Marino.Em ulp ,
264*05a0b428SJohn Marinoand log10(x) to within about 2
265*05a0b428SJohn Marino.Em ulps ;
266*05a0b428SJohn Marinoan
267*05a0b428SJohn Marino.Em ulp
268*05a0b428SJohn Marinois one
269*05a0b428SJohn Marino.Em Unit
270*05a0b428SJohn Marinoin the
271*05a0b428SJohn Marino.Em Last
272*05a0b428SJohn Marino.Em Place .
273*05a0b428SJohn MarinoThe error in
274*05a0b428SJohn Marino.Fn pow x y
275*05a0b428SJohn Marinois below about 2
276*05a0b428SJohn Marino.Em ulps
277*05a0b428SJohn Marinowhen its
278*05a0b428SJohn Marinomagnitude is moderate, but increases as
279*05a0b428SJohn Marino.Fn pow x y
280*05a0b428SJohn Marinoapproaches
281*05a0b428SJohn Marinothe over/underflow thresholds until almost as many bits could be
282*05a0b428SJohn Marinolost as are occupied by the floating\-point format's exponent
283*05a0b428SJohn Marinofield; that is 8 bits for
284*05a0b428SJohn Marino.Dq VAX D
285*05a0b428SJohn Marinoand 11 bits for IEEE 754 Double.
286*05a0b428SJohn MarinoNo such drastic loss has been exposed by testing; the worst
287*05a0b428SJohn Marinoerrors observed have been below 20
288*05a0b428SJohn Marino.Em ulps
289*05a0b428SJohn Marinofor
290*05a0b428SJohn Marino.Dq VAX D ,
291*05a0b428SJohn Marino300
292*05a0b428SJohn Marino.Em ulps
293*05a0b428SJohn Marinofor IEEE 754 Double.
294*05a0b428SJohn MarinoModerate values of
295*05a0b428SJohn Marino.Fn pow
296*05a0b428SJohn Marinoare accurate enough that
297*05a0b428SJohn Marino.Fn pow integer integer
298*05a0b428SJohn Marinois exact until it is bigger than 2**56 on a VAX,
299*05a0b428SJohn Marino2**53 for IEEE 754.
300*05a0b428SJohn Marino.Sh NOTES
301*05a0b428SJohn MarinoThe functions exp(x)\-1 and log(1+x) are called
302*05a0b428SJohn Marinoexpm1 and logp1 in BASIC on the Hewlett\-Packard HP-71B
303*05a0b428SJohn Marinoand APPLE Macintosh, EXP1 and LN1 in Pascal, exp1 and log1 in C
304*05a0b428SJohn Marinoon APPLE Macintoshes, where they have been provided to make
305*05a0b428SJohn Marinosure financial calculations of ((1+x)**n\-1)/x, namely
306*05a0b428SJohn Marinoexpm1(n\(**log1p(x))/x, will be accurate when x is tiny.
307*05a0b428SJohn MarinoThey also provide accurate inverse hyperbolic functions.
308*05a0b428SJohn Marino.Pp
309*05a0b428SJohn MarinoThe function
310*05a0b428SJohn Marino.Fn pow x 0
311*05a0b428SJohn Marinoreturns x**0 = 1 for all x including x = 0,
312*05a0b428SJohn Marino.if n \
313*05a0b428SJohn Marino\*(If
314*05a0b428SJohn Marino.if t \
315*05a0b428SJohn Marino\(if
316*05a0b428SJohn Marino(not found on a VAX),
317*05a0b428SJohn Marinoand
318*05a0b428SJohn Marino.Em \*(Na
319*05a0b428SJohn Marino(the reserved operand on a VAX).
320*05a0b428SJohn MarinoPrevious implementations of
321*05a0b428SJohn Marino.Fn pow
322*05a0b428SJohn Marinomay have defined x**0 to be undefined in some or all of these cases.
323*05a0b428SJohn MarinoHere are reasons for returning x**0 = 1 always:
324*05a0b428SJohn Marino.Bl -enum -width indent
325*05a0b428SJohn Marino.It
326*05a0b428SJohn MarinoAny program that already tests whether x is zero (or
327*05a0b428SJohn Marinoinfinite or \*(Na) before computing x**0 cannot care
328*05a0b428SJohn Marinowhether 0**0 = 1 or not.
329*05a0b428SJohn MarinoAny program that depends upon 0**0 to be invalid is dubious anyway since that
330*05a0b428SJohn Marinoexpression's meaning and, if invalid, its consequences
331*05a0b428SJohn Marinovary from one computer system to another.
332*05a0b428SJohn Marino.It
333*05a0b428SJohn MarinoSome Algebra texts (e.g., Sigler's) define x**0 = 1 for
334*05a0b428SJohn Marinoall x, including x = 0.
335*05a0b428SJohn MarinoThis is compatible with the convention that accepts a[0]
336*05a0b428SJohn Marinoas the value of polynomial
337*05a0b428SJohn Marino.Bd -literal -offset indent
338*05a0b428SJohn Marinop(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n
339*05a0b428SJohn Marino.Ed
340*05a0b428SJohn Marino.Pp
341*05a0b428SJohn Marinoat x = 0 rather than reject a[0]\(**0**0 as invalid.
342*05a0b428SJohn Marino.It
343*05a0b428SJohn MarinoAnalysts will accept 0**0 = 1 despite that x**y can
344*05a0b428SJohn Marinoapproach anything or nothing as x and y approach 0
345*05a0b428SJohn Marinoindependently.
346*05a0b428SJohn MarinoThe reason for setting 0**0 = 1 anyway is this:
347*05a0b428SJohn Marino.Bd -filled -offset indent
348*05a0b428SJohn MarinoIf x(z) and y(z) are
349*05a0b428SJohn Marino.Em any
350*05a0b428SJohn Marinofunctions analytic (expandable
351*05a0b428SJohn Marinoin power series) in z around z = 0, and if there
352*05a0b428SJohn Marinox(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0.
353*05a0b428SJohn Marino.Ed
354*05a0b428SJohn Marino.It
355*05a0b428SJohn MarinoIf 0**0 = 1, then
356*05a0b428SJohn Marino.if n \
357*05a0b428SJohn Marino\*(If**0 = 1/0**0 = 1 too; and
358*05a0b428SJohn Marino.if t \
359*05a0b428SJohn Marino\(if**0 = 1/0**0 = 1 too; and
360*05a0b428SJohn Marinothen \*(Na**0 = 1 too because x**0 = 1 for all finite
361*05a0b428SJohn Marinoand infinite x, i.e., independently of x.
362*05a0b428SJohn Marino.El
363*05a0b428SJohn Marino.Sh SEE ALSO
364*05a0b428SJohn Marino.Xr ilogb 3 ,
365*05a0b428SJohn Marino.Xr infnan 3
366*05a0b428SJohn Marino.Sh HISTORY
367*05a0b428SJohn MarinoThe
368*05a0b428SJohn Marino.Fn exp
369*05a0b428SJohn Marinoand
370*05a0b428SJohn Marino.Fn log
371*05a0b428SJohn Marinofunctions first appeared in
372*05a0b428SJohn Marino.At v1 ;
373*05a0b428SJohn Marino.Fn pow
374*05a0b428SJohn Marinoin
375*05a0b428SJohn Marino.At v3 ;
376*05a0b428SJohn Marino.Fn log10
377*05a0b428SJohn Marinoin
378*05a0b428SJohn Marino.At v7 ;
379*05a0b428SJohn Marino.Fn log1p
380*05a0b428SJohn Marinoand
381*05a0b428SJohn Marino.Fn expm1
382*05a0b428SJohn Marinoin
383*05a0b428SJohn Marino.Bx 4.3 .
384