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 January 14, 2005 36.Dt EXP 3 37.Os 38.Sh NAME 39.Nm exp , 40.Nm expf , 41.Nm exp10 , 42.Nm exp10f , 43.Nm expm1 , 44.Nm expm1f , 45.Nm log , 46.Nm logf , 47.Nm log10 , 48.Nm log10f , 49.Nm log1p , 50.Nm log1pf , 51.Nm pow , 52.Nm powf 53.Nd exponential, logarithm, power functions 54.Sh LIBRARY 55.Lb libm 56.Sh SYNOPSIS 57.In 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 pow x y 186and 187.Fn powf x y 188raise an invalid exception and return an \*(Na if 189.Fa x 190< 0 and 191.Fa y 192is not an integer. 193An attempt to take the logarithm of \*(Pm0 will result in 194a divide-by-zero exception, and an infinity will be returned. 195An attempt to take the logarithm of a negative number will 196result in an invalid exception, and an \*(Na will be generated. 197.Sh NOTES 198The functions exp(x)\-1 and log(1+x) are called 199expm1 and logp1 in 200.Tn BASIC 201on the Hewlett\-Packard 202.Tn HP Ns \-71B 203and 204.Tn APPLE 205Macintosh, 206.Tn EXP1 207and 208.Tn LN1 209in Pascal, exp1 and log1 in C 210on 211.Tn APPLE 212Macintoshes, where they have been provided to make 213sure financial calculations of ((1+x)**n\-1)/x, namely 214expm1(n\(**log1p(x))/x, will be accurate when x is tiny. 215They also provide accurate inverse hyperbolic functions. 216.Pp 217The function 218.Fn pow x 0 219returns x**0 = 1 for all x including x = 0, 220\*(If 221(not found on a 222.Tn VAX ) , 223and 224.Em NaN 225(the reserved 226operand on a 227.Tn VAX ) . 228Previous implementations of pow may 229have defined x**0 to be undefined in some or all of these 230cases. 231Here are reasons for returning x**0 = 1 always: 232.Bl -enum -width indent 233.It 234Any program that already tests whether x is zero (or 235infinite or \*(Na) before computing x**0 cannot care 236whether 0**0 = 1 or not. 237Any program that depends 238upon 0**0 to be invalid is dubious anyway since that 239expression's meaning and, if invalid, its consequences 240vary from one computer system to another. 241.It 242Some Algebra texts (e.g.\& Sigler's) define x**0 = 1 for 243all x, including x = 0. 244This is compatible with the convention that accepts a[0] 245as the value of polynomial 246.Bd -literal -offset indent 247p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n 248.Ed 249.Pp 250at x = 0 rather than reject a[0]\(**0**0 as invalid. 251.It 252Analysts will accept 0**0 = 1 despite that x**y can 253approach anything or nothing as x and y approach 0 254independently. 255The reason for setting 0**0 = 1 anyway is this: 256.Bd -ragged -offset indent 257If x(z) and y(z) are 258.Em any 259functions analytic (expandable 260in power series) in z around z = 0, and if there 261x(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0. 262.Ed 263.It 264If 0**0 = 1, then 265\*(If**0 = 1/0**0 = 1 too; and 266then \*(Na**0 = 1 too because x**0 = 1 for all finite 267and infinite x, i.e., independently of x. 268.El 269.Sh SEE ALSO 270.Xr fenv 3 , 271.Xr math 3 272.Sh HISTORY 273A 274.Fn exp , 275.Fn log 276and 277.Fn pow 278functions 279appeared in 280.At v6 . 281A 282.Fn log10 283function 284appeared in 285.At v7 . 286The 287.Fn log1p 288and 289.Fn expm1 290functions appeared in 291.Bx 4.3 . 292