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.\" $NetBSD: exp.3,v 1.18 2002/02/20 11:51:15 wiz Exp $ 34.\" 35.Dd July 31, 1991 36.Dt EXP 3 37.Os 38.Sh NAME 39.Nm exp , 40.Nm expf , 41.Nm expm1 , 42.Nm expm1f , 43.Nm log , 44.Nm logf , 45.Nm log10 , 46.Nm log10f , 47.Nm log1p , 48.Nm log1pf , 49.Nm pow , 50.Nm powf 51.Nd exponential, logarithm, power functions 52.Sh LIBRARY 53.Lb libm 54.Sh SYNOPSIS 55.Fd #include \*[Lt]math.h\*[Gt] 56.Ft double 57.Fn exp "double x" 58.Ft float 59.Fn expf "float x" 60.Ft double 61.Fn expm1 "double x" 62.Ft float 63.Fn expm1f "float x" 64.Ft double 65.Fn log "double x" 66.Ft float 67.Fn logf "float x" 68.Ft double 69.Fn log10 "double x" 70.Ft float 71.Fn log10f "float x" 72.Ft double 73.Fn log1p "double x" 74.Ft float 75.Fn log1pf "float x" 76.Ft double 77.Fn pow "double x" "double y" 78.Ft float 79.Fn powf "float x" "float y" 80.Sh DESCRIPTION 81The 82.Fn exp 83function computes the exponential value of the given argument 84.Fa x . 85.Pp 86The 87.Fn expm1 88function computes the value exp(x)\-1 accurately even for tiny argument 89.Fa x . 90.Pp 91The 92.Fn log 93function computes the value of the natural logarithm of argument 94.Fa x . 95.Pp 96The 97.Fn log10 98function computes the value of the logarithm of argument 99.Fa x 100to base 10. 101.Pp 102The 103.Fn log1p 104function computes 105the value of log(1+x) accurately even for tiny argument 106.Fa x . 107.Pp 108The 109.Fn pow 110computes the value 111of 112.Ar x 113to the exponent 114.Ar y . 115.Sh RETURN VALUES 116These functions will return the appropriate computation unless an error 117occurs or an argument is out of range. 118The functions 119.Fn exp , 120.Fn expm1 121and 122.Fn pow 123detect if the computed value will overflow, 124set the global variable 125.Va errno 126to 127.Er ERANGE 128and cause a reserved operand fault on a 129.Tn VAX . 130The function 131.Fn pow x y 132checks to see if 133.Fa x 134\*[Lt] 0 and 135.Fa y 136is not an integer, in the event this is true, 137the global variable 138.Va errno 139is set to 140.Er EDOM 141and on the 142.Tn VAX 143generate a reserved operand fault. 144On a 145.Tn VAX , 146.Va errno 147is set to 148.Er EDOM 149and the reserved operand is returned 150by log unless 151.Fa x 152\*[Gt] 0, by 153.Fn log1p 154unless 155.Fa x 156\*[Gt] \-1. 157.Sh ERRORS 158exp(x), log(x), expm1(x) and log1p(x) are accurate to within 159an 160.Em ulp , 161and log10(x) to within about 2 162.Em ulps ; 163an 164.Em ulp 165is one 166.Em Unit 167in the 168.Em Last 169.Em Place . 170The error in 171.Fn pow x y 172is below about 2 173.Em ulps 174when its 175magnitude is moderate, but increases as 176.Fn pow x y 177approaches 178the over/underflow thresholds until almost as many bits could be 179lost as are occupied by the floating\-point format's exponent 180field; that is 8 bits for 181.Tn "VAX D" 182and 11 bits for IEEE 754 Double. 183No such drastic loss has been exposed by testing; the worst 184errors observed have been below 20 185.Em ulps 186for 187.Tn "VAX D" , 188300 189.Em ulps 190for 191.Tn IEEE 192754 Double. 193Moderate values of 194.Fn pow 195are accurate enough that 196.Fn pow integer integer 197is exact until it is bigger than 2**56 on a 198.Tn VAX , 1992**53 for 200.Tn IEEE 201754. 202.Sh NOTES 203The functions exp(x)\-1 and log(1+x) are called 204expm1 and logp1 in 205.Tn BASIC 206on the Hewlett\-Packard 207.Tn HP Ns \-71B 208and 209.Tn APPLE 210Macintosh, 211.Tn EXP1 212and 213.Tn LN1 214in Pascal, exp1 and log1 in C 215on 216.Tn APPLE 217Macintoshes, where they have been provided to make 218sure financial calculations of ((1+x)**n\-1)/x, namely 219expm1(n\(**log1p(x))/x, will be accurate when x is tiny. 220They also provide accurate inverse hyperbolic functions. 221.Pp 222The function 223.Fn pow x 0 224returns x**0 = 1 for all x including x = 0, 225.if n \ 226Infinity 227.if t \ 228\(if 229(not found on a 230.Tn VAX ) , 231and 232.Em NaN 233(the reserved 234operand on a 235.Tn VAX ) . 236Previous implementations of pow may 237have defined x**0 to be undefined in some or all of these 238cases. Here are reasons for returning x**0 = 1 always: 239.Bl -enum -width indent 240.It 241Any program that already tests whether x is zero (or 242infinite or \*(Na) before computing x**0 cannot care 243whether 0**0 = 1 or not. Any program that depends 244upon 0**0 to be invalid is dubious anyway since that 245expression's meaning and, if invalid, its consequences 246vary from one computer system to another. 247.It 248Some Algebra texts (e.g. Sigler's) define x**0 = 1 for 249all x, including x = 0. 250This is compatible with the convention that accepts a[0] 251as the value of polynomial 252.Bd -literal -offset indent 253p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n 254.Ed 255.Pp 256at x = 0 rather than reject a[0]\(**0**0 as invalid. 257.It 258Analysts will accept 0**0 = 1 despite that x**y can 259approach anything or nothing as x and y approach 0 260independently. 261The reason for setting 0**0 = 1 anyway is this: 262.Bd -filled -offset indent 263If x(z) and y(z) are 264.Em any 265functions analytic (expandable 266in power series) in z around z = 0, and if there 267x(0) = y(0) = 0, then x(z)**y(z) \(-\*[Gt] 1 as z \(-\*[Gt] 0. 268.Ed 269.It 270If 0**0 = 1, then 271.if n \ 272infinity**0 = 1/0**0 = 1 too; and 273.if t \ 274\(if**0 = 1/0**0 = 1 too; and 275then \*(Na**0 = 1 too because x**0 = 1 for all finite 276and infinite x, i.e., independently of x. 277.El 278.Sh SEE ALSO 279.Xr math 3 280.Sh STANDARDS 281The 282.Fn exp , 283.Fn log , 284.Fn log10 285and 286.Fn pow 287functions conform to 288.St -ansiC . 289.Sh HISTORY 290A 291.Fn exp , 292.Fn log 293and 294.Fn pow 295functions 296appeared in 297.At v6 . 298A 299.Fn log10 300function 301appeared in 302.At v7 . 303The 304.Fn log1p 305and 306.Fn expm1 307functions appeared in 308.Bx 4.3 . 309