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.22 2005/07/21 12:55:58 christos Exp $
49 .Nd exponential, logarithm, power functions
79 .Fn pow "double x" "double y"
81 .Fn powf "float x" "float y"
85 function computes the exponential value of the given argument
90 function computes the value exp(x)\-1 accurately even for tiny argument
95 function computes the value of the natural logarithm of argument
100 function computes the value of the logarithm of argument
107 the value of log(1+x) accurately even for tiny argument
114 functions compute the value of the logarithm of argument
126 These functions will return the appropriate computation unless an error
127 occurs or an argument is out of range.
133 detect if the computed value will overflow,
134 set the global variable
138 and cause a reserved operand fault on a
146 is not an integer, in the event this is true,
153 generate a reserved operand fault.
159 and the reserved operand is returned
168 exp(x), log(x), expm1(x) and log1p(x) are accurate to within
171 and log10(x) to within about 2
185 magnitude is moderate, but increases as
188 the over/underflow thresholds until almost as many bits could be
189 lost as are occupied by the floating\-point format's exponent
190 field; that is 8 bits for
192 and 11 bits for IEEE 754 Double.
193 No such drastic loss has been exposed by testing; the worst
194 errors observed have been below 20
205 are accurate enough that
206 .Fn pow integer integer
207 is exact until it is bigger than 2**56 on a
213 The functions exp(x)\-1 and log(1+x) are called
216 on the Hewlett\-Packard
224 in Pascal, exp1 and log1 in C
227 Macintoshes, where they have been provided to make
228 sure financial calculations of ((1+x)**n\-1)/x, namely
229 expm1(n\(**log1p(x))/x, will be accurate when x is tiny.
230 They also provide accurate inverse hyperbolic functions.
234 returns x**0 = 1 for all x including x = 0,
246 Previous implementations of pow may
247 have defined x**0 to be undefined in some or all of these
249 Here are reasons for returning x**0 = 1 always:
250 .Bl -enum -width indent
252 Any program that already tests whether x is zero (or
253 infinite or \*(Na) before computing x**0 cannot care
254 whether 0**0 = 1 or not.
255 Any program that depends
256 upon 0**0 to be invalid is dubious anyway since that
257 expression's meaning and, if invalid, its consequences
258 vary from one computer system to another.
260 Some Algebra texts (e.g. Sigler's) define x**0 = 1 for
261 all x, including x = 0.
262 This is compatible with the convention that accepts a[0]
263 as the value of polynomial
264 .Bd -literal -offset indent
265 p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n
268 at x = 0 rather than reject a[0]\(**0**0 as invalid.
270 Analysts will accept 0**0 = 1 despite that x**y can
271 approach anything or nothing as x and y approach 0
273 The reason for setting 0**0 = 1 anyway is this:
274 .Bd -filled -offset indent
277 functions analytic (expandable
278 in power series) in z around z = 0, and if there
279 x(0) = y(0) = 0, then x(z)**y(z) \(-\*[Gt] 1 as z \(-\*[Gt] 0.
284 infinity**0 = 1/0**0 = 1 too; and
286 \(if**0 = 1/0**0 = 1 too; and
287 then \*(Na**0 = 1 too because x**0 = 1 for all finite
288 and infinite x, i.e., independently of x.
319 functions appeared in