1*05a0b428SJohn Marino.\" $OpenBSD: exp.3,v 1.29 2015/01/15 19:06:31 schwarze Exp $ 2*05a0b428SJohn Marino.\" 3*05a0b428SJohn Marino.\" Copyright (c) 1985, 1991 Regents of the University of California. 4*05a0b428SJohn Marino.\" All rights reserved. 5*05a0b428SJohn Marino.\" 6*05a0b428SJohn Marino.\" Redistribution and use in source and binary forms, with or without 7*05a0b428SJohn Marino.\" modification, are permitted provided that the following conditions 8*05a0b428SJohn Marino.\" are met: 9*05a0b428SJohn Marino.\" 1. Redistributions of source code must retain the above copyright 10*05a0b428SJohn Marino.\" notice, this list of conditions and the following disclaimer. 11*05a0b428SJohn Marino.\" 2. Redistributions in binary form must reproduce the above copyright 12*05a0b428SJohn Marino.\" notice, this list of conditions and the following disclaimer in the 13*05a0b428SJohn Marino.\" documentation and/or other materials provided with the distribution. 14*05a0b428SJohn Marino.\" 3. Neither the name of the University nor the names of its contributors 15*05a0b428SJohn Marino.\" may be used to endorse or promote products derived from this software 16*05a0b428SJohn Marino.\" without specific prior written permission. 17*05a0b428SJohn Marino.\" 18*05a0b428SJohn Marino.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 19*05a0b428SJohn Marino.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*05a0b428SJohn Marino.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*05a0b428SJohn Marino.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 22*05a0b428SJohn Marino.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23*05a0b428SJohn Marino.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24*05a0b428SJohn Marino.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25*05a0b428SJohn Marino.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26*05a0b428SJohn Marino.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27*05a0b428SJohn Marino.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28*05a0b428SJohn Marino.\" SUCH DAMAGE. 29*05a0b428SJohn Marino.\" 30*05a0b428SJohn Marino.\" from: @(#)exp.3 6.12 (Berkeley) 7/31/91 31*05a0b428SJohn Marino.\" 32*05a0b428SJohn Marino.Dd $Mdocdate: January 15 2015 $ 33*05a0b428SJohn Marino.Dt EXP 3 34*05a0b428SJohn Marino.Os 35*05a0b428SJohn Marino.Sh NAME 36*05a0b428SJohn Marino.Nm exp , 37*05a0b428SJohn Marino.Nm expf , 38*05a0b428SJohn Marino.Nm expl , 39*05a0b428SJohn Marino.Nm exp2 , 40*05a0b428SJohn Marino.Nm exp2f , 41*05a0b428SJohn Marino.Nm exp2l , 42*05a0b428SJohn Marino.Nm expm1 , 43*05a0b428SJohn Marino.Nm expm1f , 44*05a0b428SJohn Marino.Nm expm1l , 45*05a0b428SJohn Marino.Nm log , 46*05a0b428SJohn Marino.Nm logf , 47*05a0b428SJohn Marino.Nm logl , 48*05a0b428SJohn Marino.Nm log2 , 49*05a0b428SJohn Marino.Nm log2f , 50*05a0b428SJohn Marino.Nm log2l , 51*05a0b428SJohn Marino.Nm log10 , 52*05a0b428SJohn Marino.Nm log10f , 53*05a0b428SJohn Marino.Nm log10l , 54*05a0b428SJohn Marino.Nm log1p , 55*05a0b428SJohn Marino.Nm log1pf , 56*05a0b428SJohn Marino.Nm log1pl , 57*05a0b428SJohn Marino.Nm pow , 58*05a0b428SJohn Marino.Nm powf , 59*05a0b428SJohn Marino.Nm powl 60*05a0b428SJohn Marino.Nd exponential, logarithm, power functions 61*05a0b428SJohn Marino.Sh SYNOPSIS 62*05a0b428SJohn Marino.In math.h 63*05a0b428SJohn Marino.Ft double 64*05a0b428SJohn Marino.Fn exp "double x" 65*05a0b428SJohn Marino.Ft float 66*05a0b428SJohn Marino.Fn expf "float x" 67*05a0b428SJohn Marino.Ft long double 68*05a0b428SJohn Marino.Fn expl "long double x" 69*05a0b428SJohn Marino.Ft double 70*05a0b428SJohn Marino.Fn exp2 "double x" 71*05a0b428SJohn Marino.Ft float 72*05a0b428SJohn Marino.Fn exp2f "float x" 73*05a0b428SJohn Marino.Ft long double 74*05a0b428SJohn Marino.Fn exp2l "long double x" 75*05a0b428SJohn Marino.Ft double 76*05a0b428SJohn Marino.Fn expm1 "double x" 77*05a0b428SJohn Marino.Ft float 78*05a0b428SJohn Marino.Fn expm1f "float x" 79*05a0b428SJohn Marino.Ft long double 80*05a0b428SJohn Marino.Fn expm1l "long double x" 81*05a0b428SJohn Marino.Ft double 82*05a0b428SJohn Marino.Fn log "double x" 83*05a0b428SJohn Marino.Ft float 84*05a0b428SJohn Marino.Fn logf "float x" 85*05a0b428SJohn Marino.Ft long double 86*05a0b428SJohn Marino.Fn logl "long double x" 87*05a0b428SJohn Marino.Ft double 88*05a0b428SJohn Marino.Fn log2 "double x" 89*05a0b428SJohn Marino.Ft float 90*05a0b428SJohn Marino.Fn log2f "float x" 91*05a0b428SJohn Marino.Ft long double 92*05a0b428SJohn Marino.Fn log2l "long double x" 93*05a0b428SJohn Marino.Ft double 94*05a0b428SJohn Marino.Fn log10 "double x" 95*05a0b428SJohn Marino.Ft float 96*05a0b428SJohn Marino.Fn log10f "float x" 97*05a0b428SJohn Marino.Ft long double 98*05a0b428SJohn Marino.Fn log10l "long double x" 99*05a0b428SJohn Marino.Ft double 100*05a0b428SJohn Marino.Fn log1p "double x" 101*05a0b428SJohn Marino.Ft float 102*05a0b428SJohn Marino.Fn log1pf "float x" 103*05a0b428SJohn Marino.Ft long double 104*05a0b428SJohn Marino.Fn log1pl "long double x" 105*05a0b428SJohn Marino.Ft double 106*05a0b428SJohn Marino.Fn pow "double x" "double y" 107*05a0b428SJohn Marino.Ft float 108*05a0b428SJohn Marino.Fn powf "float x" "float y" 109*05a0b428SJohn Marino.Ft long double 110*05a0b428SJohn Marino.Fn powl "long double x" "long double y" 111*05a0b428SJohn Marino.Sh DESCRIPTION 112*05a0b428SJohn MarinoThe 113*05a0b428SJohn Marino.Fn exp 114*05a0b428SJohn Marinofunction computes the base 115*05a0b428SJohn Marino.Ms e 116*05a0b428SJohn Marinoexponential value of the given argument 117*05a0b428SJohn Marino.Fa x . 118*05a0b428SJohn MarinoThe 119*05a0b428SJohn Marino.Fn expf 120*05a0b428SJohn Marinofunction is a single precision version of 121*05a0b428SJohn Marino.Fn exp . 122*05a0b428SJohn MarinoThe 123*05a0b428SJohn Marino.Fn expl 124*05a0b428SJohn Marinofunction is an extended precision version of 125*05a0b428SJohn Marino.Fn exp . 126*05a0b428SJohn Marino.Pp 127*05a0b428SJohn MarinoThe 128*05a0b428SJohn Marino.Fn exp2 129*05a0b428SJohn Marinofunction computes the base 2 exponential of the given argument 130*05a0b428SJohn Marino.Fa x . 131*05a0b428SJohn MarinoThe 132*05a0b428SJohn Marino.Fn exp2f 133*05a0b428SJohn Marinofunction is a single precision version of 134*05a0b428SJohn Marino.Fn exp2 . 135*05a0b428SJohn MarinoThe 136*05a0b428SJohn Marino.Fn exp2l 137*05a0b428SJohn Marinofunction is an extended precision version of 138*05a0b428SJohn Marino.Fn exp2 . 139*05a0b428SJohn Marino.Pp 140*05a0b428SJohn MarinoThe 141*05a0b428SJohn Marino.Fn expm1 142*05a0b428SJohn Marinofunction computes the value exp(x)\-1 accurately even for tiny argument 143*05a0b428SJohn Marino.Fa x . 144*05a0b428SJohn MarinoThe 145*05a0b428SJohn Marino.Fn expm1f 146*05a0b428SJohn Marinofunction is a single precision version of 147*05a0b428SJohn Marino.Fn expm1 . 148*05a0b428SJohn MarinoThe 149*05a0b428SJohn Marino.Fn expm1l 150*05a0b428SJohn Marinofunction is an extended precision version of 151*05a0b428SJohn Marino.Fn expm1 . 152*05a0b428SJohn Marino.Pp 153*05a0b428SJohn MarinoThe 154*05a0b428SJohn Marino.Fn log 155*05a0b428SJohn Marinofunction computes the value of the natural logarithm of argument 156*05a0b428SJohn Marino.Fa x . 157*05a0b428SJohn MarinoThe 158*05a0b428SJohn Marino.Fn logf 159*05a0b428SJohn Marinofunction is a single precision version of 160*05a0b428SJohn Marino.Fn log . 161*05a0b428SJohn MarinoThe 162*05a0b428SJohn Marino.Fn logl 163*05a0b428SJohn Marinofunction is an extended precision version of 164*05a0b428SJohn Marino.Fn log . 165*05a0b428SJohn Marino.Pp 166*05a0b428SJohn MarinoThe 167*05a0b428SJohn Marino.Fn log2 168*05a0b428SJohn Marinofunction computes the value of the logarithm of argument 169*05a0b428SJohn Marino.Fa x 170*05a0b428SJohn Marinoto base 2. 171*05a0b428SJohn MarinoThe 172*05a0b428SJohn Marino.Fn log2f 173*05a0b428SJohn Marinofunction is a single precision version of 174*05a0b428SJohn Marino.Fn log2 . 175*05a0b428SJohn MarinoThe 176*05a0b428SJohn Marino.Fn log2l 177*05a0b428SJohn Marinofunction is an extended precision version of 178*05a0b428SJohn Marino.Fn log2 . 179*05a0b428SJohn Marino.Pp 180*05a0b428SJohn MarinoThe 181*05a0b428SJohn Marino.Fn log10 182*05a0b428SJohn Marinofunction computes the value of the logarithm of argument 183*05a0b428SJohn Marino.Fa x 184*05a0b428SJohn Marinoto base 10. 185*05a0b428SJohn MarinoThe 186*05a0b428SJohn Marino.Fn log10f 187*05a0b428SJohn Marinofunction is a single precision version of 188*05a0b428SJohn Marino.Fn log10 . 189*05a0b428SJohn MarinoThe 190*05a0b428SJohn Marino.Fn log10l 191*05a0b428SJohn Marinofunction is an extended precision version of 192*05a0b428SJohn Marino.Fn log10 . 193*05a0b428SJohn Marino.Pp 194*05a0b428SJohn MarinoThe 195*05a0b428SJohn Marino.Fn log1p 196*05a0b428SJohn Marinofunction computes 197*05a0b428SJohn Marinothe value of log(1+x) accurately even for tiny argument 198*05a0b428SJohn Marino.Fa x . 199*05a0b428SJohn MarinoThe 200*05a0b428SJohn Marino.Fn log1pf 201*05a0b428SJohn Marinofunction is a single precision version of 202*05a0b428SJohn Marino.Fn log1p . 203*05a0b428SJohn MarinoThe 204*05a0b428SJohn Marino.Fn log1pl 205*05a0b428SJohn Marinofunction is an extended precision version of 206*05a0b428SJohn Marino.Fn log1p . 207*05a0b428SJohn Marino.Pp 208*05a0b428SJohn MarinoThe 209*05a0b428SJohn Marino.Fn pow 210*05a0b428SJohn Marinofunction computes the value of 211*05a0b428SJohn Marino.Ar x 212*05a0b428SJohn Marinoto the exponent 213*05a0b428SJohn Marino.Ar y . 214*05a0b428SJohn MarinoThe 215*05a0b428SJohn Marino.Fn powf 216*05a0b428SJohn Marinofunction is a single precision version of 217*05a0b428SJohn Marino.Fn pow . 218*05a0b428SJohn MarinoThe 219*05a0b428SJohn Marino.Fn powl 220*05a0b428SJohn Marinofunction is an extended precision version of 221*05a0b428SJohn Marino.Fn pow . 222*05a0b428SJohn Marino.Sh RETURN VALUES 223*05a0b428SJohn MarinoThese functions will return the appropriate computation unless an error 224*05a0b428SJohn Marinooccurs or an argument is out of range. 225*05a0b428SJohn MarinoThe functions 226*05a0b428SJohn Marino.Fn exp , 227*05a0b428SJohn Marino.Fn expm1 228*05a0b428SJohn Marinoand 229*05a0b428SJohn Marino.Fn pow 230*05a0b428SJohn Marinodetect if the computed value will overflow, 231*05a0b428SJohn Marinoset the global variable 232*05a0b428SJohn Marino.Va errno 233*05a0b428SJohn Marinoto 234*05a0b428SJohn Marino.Er ERANGE 235*05a0b428SJohn Marinoand cause a reserved operand fault on a VAX or Tahoe. 236*05a0b428SJohn MarinoThe function 237*05a0b428SJohn Marino.Fn pow x y 238*05a0b428SJohn Marinochecks to see if 239*05a0b428SJohn Marino.Fa x 240*05a0b428SJohn Marino< 0 and 241*05a0b428SJohn Marino.Fa y 242*05a0b428SJohn Marinois not an integer, in the event this is true, 243*05a0b428SJohn Marinothe global variable 244*05a0b428SJohn Marino.Va errno 245*05a0b428SJohn Marinois set to 246*05a0b428SJohn Marino.Er EDOM 247*05a0b428SJohn Marinoand on the VAX and Tahoe generate a reserved operand fault. 248*05a0b428SJohn MarinoOn a VAX and Tahoe, 249*05a0b428SJohn Marino.Va errno 250*05a0b428SJohn Marinois set to 251*05a0b428SJohn Marino.Er EDOM 252*05a0b428SJohn Marinoand the reserved operand is returned 253*05a0b428SJohn Marinoby log unless 254*05a0b428SJohn Marino.Fa x 255*05a0b428SJohn Marino> 0, by 256*05a0b428SJohn Marino.Fn log1p 257*05a0b428SJohn Marinounless 258*05a0b428SJohn Marino.Fa x 259*05a0b428SJohn Marino> \-1. 260*05a0b428SJohn Marino.Sh ERRORS (due to Roundoff etc.) 261*05a0b428SJohn Marinoexp(x), log(x), expm1(x) and log1p(x) are accurate to within 262*05a0b428SJohn Marinoan 263*05a0b428SJohn Marino.Em ulp , 264*05a0b428SJohn Marinoand log10(x) to within about 2 265*05a0b428SJohn Marino.Em ulps ; 266*05a0b428SJohn Marinoan 267*05a0b428SJohn Marino.Em ulp 268*05a0b428SJohn Marinois one 269*05a0b428SJohn Marino.Em Unit 270*05a0b428SJohn Marinoin the 271*05a0b428SJohn Marino.Em Last 272*05a0b428SJohn Marino.Em Place . 273*05a0b428SJohn MarinoThe error in 274*05a0b428SJohn Marino.Fn pow x y 275*05a0b428SJohn Marinois below about 2 276*05a0b428SJohn Marino.Em ulps 277*05a0b428SJohn Marinowhen its 278*05a0b428SJohn Marinomagnitude is moderate, but increases as 279*05a0b428SJohn Marino.Fn pow x y 280*05a0b428SJohn Marinoapproaches 281*05a0b428SJohn Marinothe over/underflow thresholds until almost as many bits could be 282*05a0b428SJohn Marinolost as are occupied by the floating\-point format's exponent 283*05a0b428SJohn Marinofield; that is 8 bits for 284*05a0b428SJohn Marino.Dq VAX D 285*05a0b428SJohn Marinoand 11 bits for IEEE 754 Double. 286*05a0b428SJohn MarinoNo such drastic loss has been exposed by testing; the worst 287*05a0b428SJohn Marinoerrors observed have been below 20 288*05a0b428SJohn Marino.Em ulps 289*05a0b428SJohn Marinofor 290*05a0b428SJohn Marino.Dq VAX D , 291*05a0b428SJohn Marino300 292*05a0b428SJohn Marino.Em ulps 293*05a0b428SJohn Marinofor IEEE 754 Double. 294*05a0b428SJohn MarinoModerate values of 295*05a0b428SJohn Marino.Fn pow 296*05a0b428SJohn Marinoare accurate enough that 297*05a0b428SJohn Marino.Fn pow integer integer 298*05a0b428SJohn Marinois exact until it is bigger than 2**56 on a VAX, 299*05a0b428SJohn Marino2**53 for IEEE 754. 300*05a0b428SJohn Marino.Sh NOTES 301*05a0b428SJohn MarinoThe functions exp(x)\-1 and log(1+x) are called 302*05a0b428SJohn Marinoexpm1 and logp1 in BASIC on the Hewlett\-Packard HP-71B 303*05a0b428SJohn Marinoand APPLE Macintosh, EXP1 and LN1 in Pascal, exp1 and log1 in C 304*05a0b428SJohn Marinoon APPLE Macintoshes, where they have been provided to make 305*05a0b428SJohn Marinosure financial calculations of ((1+x)**n\-1)/x, namely 306*05a0b428SJohn Marinoexpm1(n\(**log1p(x))/x, will be accurate when x is tiny. 307*05a0b428SJohn MarinoThey also provide accurate inverse hyperbolic functions. 308*05a0b428SJohn Marino.Pp 309*05a0b428SJohn MarinoThe function 310*05a0b428SJohn Marino.Fn pow x 0 311*05a0b428SJohn Marinoreturns x**0 = 1 for all x including x = 0, 312*05a0b428SJohn Marino.if n \ 313*05a0b428SJohn Marino\*(If 314*05a0b428SJohn Marino.if t \ 315*05a0b428SJohn Marino\(if 316*05a0b428SJohn Marino(not found on a VAX), 317*05a0b428SJohn Marinoand 318*05a0b428SJohn Marino.Em \*(Na 319*05a0b428SJohn Marino(the reserved operand on a VAX). 320*05a0b428SJohn MarinoPrevious implementations of 321*05a0b428SJohn Marino.Fn pow 322*05a0b428SJohn Marinomay have defined x**0 to be undefined in some or all of these cases. 323*05a0b428SJohn MarinoHere are reasons for returning x**0 = 1 always: 324*05a0b428SJohn Marino.Bl -enum -width indent 325*05a0b428SJohn Marino.It 326*05a0b428SJohn MarinoAny program that already tests whether x is zero (or 327*05a0b428SJohn Marinoinfinite or \*(Na) before computing x**0 cannot care 328*05a0b428SJohn Marinowhether 0**0 = 1 or not. 329*05a0b428SJohn MarinoAny program that depends upon 0**0 to be invalid is dubious anyway since that 330*05a0b428SJohn Marinoexpression's meaning and, if invalid, its consequences 331*05a0b428SJohn Marinovary from one computer system to another. 332*05a0b428SJohn Marino.It 333*05a0b428SJohn MarinoSome Algebra texts (e.g., Sigler's) define x**0 = 1 for 334*05a0b428SJohn Marinoall x, including x = 0. 335*05a0b428SJohn MarinoThis is compatible with the convention that accepts a[0] 336*05a0b428SJohn Marinoas the value of polynomial 337*05a0b428SJohn Marino.Bd -literal -offset indent 338*05a0b428SJohn Marinop(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n 339*05a0b428SJohn Marino.Ed 340*05a0b428SJohn Marino.Pp 341*05a0b428SJohn Marinoat x = 0 rather than reject a[0]\(**0**0 as invalid. 342*05a0b428SJohn Marino.It 343*05a0b428SJohn MarinoAnalysts will accept 0**0 = 1 despite that x**y can 344*05a0b428SJohn Marinoapproach anything or nothing as x and y approach 0 345*05a0b428SJohn Marinoindependently. 346*05a0b428SJohn MarinoThe reason for setting 0**0 = 1 anyway is this: 347*05a0b428SJohn Marino.Bd -filled -offset indent 348*05a0b428SJohn MarinoIf x(z) and y(z) are 349*05a0b428SJohn Marino.Em any 350*05a0b428SJohn Marinofunctions analytic (expandable 351*05a0b428SJohn Marinoin power series) in z around z = 0, and if there 352*05a0b428SJohn Marinox(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0. 353*05a0b428SJohn Marino.Ed 354*05a0b428SJohn Marino.It 355*05a0b428SJohn MarinoIf 0**0 = 1, then 356*05a0b428SJohn Marino.if n \ 357*05a0b428SJohn Marino\*(If**0 = 1/0**0 = 1 too; and 358*05a0b428SJohn Marino.if t \ 359*05a0b428SJohn Marino\(if**0 = 1/0**0 = 1 too; and 360*05a0b428SJohn Marinothen \*(Na**0 = 1 too because x**0 = 1 for all finite 361*05a0b428SJohn Marinoand infinite x, i.e., independently of x. 362*05a0b428SJohn Marino.El 363*05a0b428SJohn Marino.Sh SEE ALSO 364*05a0b428SJohn Marino.Xr ilogb 3 , 365*05a0b428SJohn Marino.Xr infnan 3 366*05a0b428SJohn Marino.Sh HISTORY 367*05a0b428SJohn MarinoThe 368*05a0b428SJohn Marino.Fn exp 369*05a0b428SJohn Marinoand 370*05a0b428SJohn Marino.Fn log 371*05a0b428SJohn Marinofunctions first appeared in 372*05a0b428SJohn Marino.At v1 ; 373*05a0b428SJohn Marino.Fn pow 374*05a0b428SJohn Marinoin 375*05a0b428SJohn Marino.At v3 ; 376*05a0b428SJohn Marino.Fn log10 377*05a0b428SJohn Marinoin 378*05a0b428SJohn Marino.At v7 ; 379*05a0b428SJohn Marino.Fn log1p 380*05a0b428SJohn Marinoand 381*05a0b428SJohn Marino.Fn expm1 382*05a0b428SJohn Marinoin 383*05a0b428SJohn Marino.Bx 4.3 . 384