1 .\" Copyright (c) 1985, 1991 Regents of the University of California.
2 .\" All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
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. Neither the name of the University nor the names of its contributors
13 .\" may be used to endorse or promote products derived from this software
14 .\" without specific prior written permission.
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" from: @(#)exp.3 6.12 (Berkeley) 7/31/91
29 .\" $NetBSD: exp.3,v 1.23 2005/07/21 12:58:22 wiz Exp $
30 .\" $DragonFly: src/lib/libm/man/exp.3,v 1.2 2007/06/16 22:26:53 pavalos Exp $
50 .Nd exponential, logarithm, power functions
80 .Fn pow "double x" "double y"
82 .Fn powf "float x" "float y"
86 function computes the exponential value of the given argument
91 function computes the value exp(x)\-1 accurately even for tiny argument
96 function computes the value of the natural logarithm of argument
101 function computes the value of the logarithm of argument
108 the value of log(1+x) accurately even for tiny argument
115 functions compute the value of the logarithm of argument
127 These functions will return the appropriate computation unless an error
128 occurs or an argument is out of range.
134 detect if the computed value will overflow,
135 set the global variable
139 and cause a reserved operand fault on a
147 is not an integer, in the event this is true,
154 generate a reserved operand fault.
160 and the reserved operand is returned
169 exp(x), log(x), expm1(x) and log1p(x) are accurate to within
172 and log10(x) to within about 2
186 magnitude is moderate, but increases as
189 the over/underflow thresholds until almost as many bits could be
190 lost as are occupied by the floating\-point format's exponent
191 field; that is 8 bits for
193 and 11 bits for IEEE 754 Double.
194 No such drastic loss has been exposed by testing; the worst
195 errors observed have been below 20
206 are accurate enough that
207 .Fn pow integer integer
208 is exact until it is bigger than 2**56 on a
214 The functions exp(x)\-1 and log(1+x) are called
217 on the Hewlett\-Packard
225 in Pascal, exp1 and log1 in C
228 Macintoshes, where they have been provided to make
229 sure financial calculations of ((1+x)**n\-1)/x, namely
230 expm1(n\(**log1p(x))/x, will be accurate when x is tiny.
231 They also provide accurate inverse hyperbolic functions.
235 returns x**0 = 1 for all x including x = 0,
247 Previous implementations of pow may
248 have defined x**0 to be undefined in some or all of these
250 Here are reasons for returning x**0 = 1 always:
251 .Bl -enum -width indent
253 Any program that already tests whether x is zero (or
254 infinite or \*(Na) before computing x**0 cannot care
255 whether 0**0 = 1 or not.
256 Any program that depends
257 upon 0**0 to be invalid is dubious anyway since that
258 expression's meaning and, if invalid, its consequences
259 vary from one computer system to another.
261 Some Algebra texts (e.g. Sigler's) define x**0 = 1 for
262 all x, including x = 0.
263 This is compatible with the convention that accepts a[0]
264 as the value of polynomial
265 .Bd -literal -offset indent
266 p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n
269 at x = 0 rather than reject a[0]\(**0**0 as invalid.
271 Analysts will accept 0**0 = 1 despite that x**y can
272 approach anything or nothing as x and y approach 0
274 The reason for setting 0**0 = 1 anyway is this:
275 .Bd -filled -offset indent
278 functions analytic (expandable
279 in power series) in z around z = 0, and if there
280 x(0) = y(0) = 0, then x(z)**y(z) \(-\*[Gt] 1 as z \(-\*[Gt] 0.
285 infinity**0 = 1/0**0 = 1 too; and
287 \(if**0 = 1/0**0 = 1 too; and
288 then \*(Na**0 = 1 too because x**0 = 1 for all finite
289 and infinite x, i.e., independently of x.
320 functions appeared in