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 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.In math.h 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 83and the 84.Fn expf 85functions compute the exponential value of the given argument 86.Fa x . 87.Pp 88The 89.Fn expm1 90and the 91.Fn expm1f 92functions compute the value exp(x)\-1 accurately even for tiny argument 93.Fa x . 94.Pp 95The 96.Fn log 97and the 98.Fn logf 99functions compute the value of the natural logarithm of argument 100.Fa x . 101.Pp 102The 103.Fn log10 104and the 105.Fn log10f 106functions compute the value of the logarithm of argument 107.Fa x 108to base 10. 109.Pp 110The 111.Fn log1p 112and the 113.Fn log1pf 114functions compute 115the value of log(1+x) accurately even for tiny argument 116.Fa x . 117.Pp 118The 119.Fn pow 120and the 121.Fn powf 122functions compute the value 123of 124.Ar x 125to the exponent 126.Ar y . 127.Sh ERROR (due to Roundoff etc.) 128.Fn exp x , 129.Fn log x , 130.Fn expm1 x 131and 132.Fn log1p x 133are accurate to within 134an 135.Em ulp , 136and 137.Fn log10 x 138to within about 2 139.Em ulps ; 140an 141.Em ulp 142is one 143.Em Unit 144in the 145.Em Last 146.Em Place . 147The error in 148.Fn pow x y 149is below about 2 150.Em ulps 151when its 152magnitude is moderate, but increases as 153.Fn pow x y 154approaches 155the over/underflow thresholds until almost as many bits could be 156lost as are occupied by the floating\-point format's exponent 157field; that is 8 bits for 158.Tn "VAX D" 159and 11 bits for IEEE 754 Double. 160No such drastic loss has been exposed by testing; the worst 161errors observed have been below 20 162.Em ulps 163for 164.Tn "VAX D" , 165300 166.Em ulps 167for 168.Tn IEEE 169754 Double. 170Moderate values of 171.Fn pow 172are accurate enough that 173.Fn pow integer integer 174is exact until it is bigger than 2**56 on a 175.Tn VAX , 1762**53 for 177.Tn IEEE 178754. 179.Sh RETURN VALUES 180These functions will return the appropriate computation unless an error 181occurs or an argument is out of range. 182The functions 183.Fn pow x y 184and 185.Fn powf x y 186raise an invalid exception and return an \*(Na if 187.Fa x 188< 0 and 189.Fa y 190is not an integer. 191An attempt to take the logarithm of \*(Pm0 will result in 192a divide-by-zero exception, and an infinity will be returned. 193An attempt to take the logarithm of a negative number will 194result in an invalid exception, and an \*(Na will be generated. 195.Sh NOTES 196The functions exp(x)\-1 and log(1+x) are called 197expm1 and logp1 in 198.Tn BASIC 199on the Hewlett\-Packard 200.Tn HP Ns \-71B 201and 202.Tn APPLE 203Macintosh, 204.Tn EXP1 205and 206.Tn LN1 207in Pascal, exp1 and log1 in C 208on 209.Tn APPLE 210Macintoshes, where they have been provided to make 211sure financial calculations of ((1+x)**n\-1)/x, namely 212expm1(n\(**log1p(x))/x, will be accurate when x is tiny. 213They also provide accurate inverse hyperbolic functions. 214.Pp 215The function 216.Fn pow x 0 217returns x**0 = 1 for all x including x = 0, 218\*(If 219(not found on a 220.Tn VAX ) , 221and 222.Em NaN 223(the reserved 224operand on a 225.Tn VAX ) . 226Previous implementations of pow may 227have defined x**0 to be undefined in some or all of these 228cases. 229Here are reasons for returning x**0 = 1 always: 230.Bl -enum -width indent 231.It 232Any program that already tests whether x is zero (or 233infinite or \*(Na) before computing x**0 cannot care 234whether 0**0 = 1 or not. 235Any program that depends 236upon 0**0 to be invalid is dubious anyway since that 237expression's meaning and, if invalid, its consequences 238vary from one computer system to another. 239.It 240Some Algebra texts (e.g.\& Sigler's) define x**0 = 1 for 241all x, including x = 0. 242This is compatible with the convention that accepts a[0] 243as the value of polynomial 244.Bd -literal -offset indent 245p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n 246.Ed 247.Pp 248at x = 0 rather than reject a[0]\(**0**0 as invalid. 249.It 250Analysts will accept 0**0 = 1 despite that x**y can 251approach anything or nothing as x and y approach 0 252independently. 253The reason for setting 0**0 = 1 anyway is this: 254.Bd -ragged -offset indent 255If x(z) and y(z) are 256.Em any 257functions analytic (expandable 258in power series) in z around z = 0, and if there 259x(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0. 260.Ed 261.It 262If 0**0 = 1, then 263\*(If**0 = 1/0**0 = 1 too; and 264then \*(Na**0 = 1 too because x**0 = 1 for all finite 265and infinite x, i.e., independently of x. 266.El 267.Sh SEE ALSO 268.Xr fenv 3 , 269.Xr math 3 270.Sh HISTORY 271A 272.Fn exp , 273.Fn log 274and 275.Fn pow 276functions 277appeared in 278.At v6 . 279A 280.Fn log10 281function 282appeared in 283.At v7 . 284The 285.Fn log1p 286and 287.Fn expm1 288functions appeared in 289.Bx 4.3 . 290