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 July 31, 1991 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 exp , 186.Fn expm1 , 187.Fn pow 188detect if the computed value will overflow, 189set the global variable 190.Va errno 191to 192.Er ERANGE 193and cause a reserved operand fault on a 194.Tn VAX 195or 196.Tn Tahoe . 197The functions 198.Fn pow x y 199checks to see if 200.Fa x 201< 0 and 202.Fa y 203is not an integer, in the event this is true, 204the global variable 205.Va errno 206is set to 207.Er EDOM 208and on the 209.Tn VAX 210and 211.Tn Tahoe 212generate a reserved operand fault. 213On a 214.Tn VAX 215and 216.Tn Tahoe , 217.Va errno 218is set to 219.Er EDOM 220and the reserved operand is returned 221by log unless 222.Fa x 223> 0, by 224.Fn log1p 225unless 226.Fa x 227> \-1. 228.Sh NOTES 229The functions exp(x)\-1 and log(1+x) are called 230expm1 and logp1 in 231.Tn BASIC 232on the Hewlett\-Packard 233.Tn HP Ns \-71B 234and 235.Tn APPLE 236Macintosh, 237.Tn EXP1 238and 239.Tn LN1 240in Pascal, exp1 and log1 in C 241on 242.Tn APPLE 243Macintoshes, where they have been provided to make 244sure financial calculations of ((1+x)**n\-1)/x, namely 245expm1(n\(**log1p(x))/x, will be accurate when x is tiny. 246They also provide accurate inverse hyperbolic functions. 247.Pp 248The function 249.Fn pow x 0 250returns x**0 = 1 for all x including x = 0, 251.if n \ 252Infinity 253.if t \ 254\(if 255(not found on a 256.Tn VAX ) , 257and 258.Em NaN 259(the reserved 260operand on a 261.Tn VAX ) . 262Previous implementations of pow may 263have defined x**0 to be undefined in some or all of these 264cases. 265Here are reasons for returning x**0 = 1 always: 266.Bl -enum -width indent 267.It 268Any program that already tests whether x is zero (or 269infinite or \*(Na) before computing x**0 cannot care 270whether 0**0 = 1 or not. 271Any program that depends 272upon 0**0 to be invalid is dubious anyway since that 273expression's meaning and, if invalid, its consequences 274vary from one computer system to another. 275.It 276Some Algebra texts (e.g.\& Sigler's) define x**0 = 1 for 277all x, including x = 0. 278This is compatible with the convention that accepts a[0] 279as the value of polynomial 280.Bd -literal -offset indent 281p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n 282.Ed 283.Pp 284at x = 0 rather than reject a[0]\(**0**0 as invalid. 285.It 286Analysts will accept 0**0 = 1 despite that x**y can 287approach anything or nothing as x and y approach 0 288independently. 289The reason for setting 0**0 = 1 anyway is this: 290.Bd -ragged -offset indent 291If x(z) and y(z) are 292.Em any 293functions analytic (expandable 294in power series) in z around z = 0, and if there 295x(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0. 296.Ed 297.It 298If 0**0 = 1, then 299.if n \ 300infinity**0 = 1/0**0 = 1 too; and 301.if t \ 302\(if**0 = 1/0**0 = 1 too; and 303then \*(Na**0 = 1 too because x**0 = 1 for all finite 304and infinite x, i.e., independently of x. 305.El 306.Sh SEE ALSO 307.Xr math 3 308.Sh HISTORY 309A 310.Fn exp , 311.Fn log 312and 313.Fn pow 314functions 315appeared in 316.At v6 . 317A 318.Fn log10 319function 320appeared in 321.At v7 . 322The 323.Fn log1p 324and 325.Fn expm1 326functions appeared in 327.Bx 4.3 . 328