|  | .\" Copyright (c) 1985, 1991 Regents of the University of California. | 
|  | .\" All rights reserved. | 
|  | .\" | 
|  | .\" Redistribution and use in source and binary forms, with or without | 
|  | .\" modification, are permitted provided that the following conditions | 
|  | .\" are met: | 
|  | .\" 1. Redistributions of source code must retain the above copyright | 
|  | .\"    notice, this list of conditions and the following disclaimer. | 
|  | .\" 2. Redistributions in binary form must reproduce the above copyright | 
|  | .\"    notice, this list of conditions and the following disclaimer in the | 
|  | .\"    documentation and/or other materials provided with the distribution. | 
|  | .\" 3. All advertising materials mentioning features or use of this software | 
|  | .\"    must display the following acknowledgement: | 
|  | .\"	This product includes software developed by the University of | 
|  | .\"	California, Berkeley and its contributors. | 
|  | .\" 4. Neither the name of the University nor the names of its contributors | 
|  | .\"    may be used to endorse or promote products derived from this software | 
|  | .\"    without specific prior written permission. | 
|  | .\" | 
|  | .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | 
|  | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
|  | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
|  | .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | 
|  | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
|  | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
|  | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
|  | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
|  | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
|  | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
|  | .\" SUCH DAMAGE. | 
|  | .\" | 
|  | .\"     from: @(#)exp.3	6.12 (Berkeley) 7/31/91 | 
|  | .\" $FreeBSD: src/lib/msun/man/exp.3,v 1.22 2005/04/05 02:57:28 das Exp $ | 
|  | .\" | 
|  | .Dd April 5, 2005 | 
|  | .Dt EXP 3 | 
|  | .Os | 
|  | .Sh NAME | 
|  | .Nm exp , | 
|  | .Nm expf , | 
|  | .\" The sorting error is intentional.  exp and expf should be adjacent. | 
|  | .Nm exp2 , | 
|  | .Nm exp2f , | 
|  | .Nm expm1 , | 
|  | .Nm expm1f , | 
|  | .Nm log , | 
|  | .Nm logf , | 
|  | .Nm log10 , | 
|  | .Nm log10f , | 
|  | .Nm log1p , | 
|  | .Nm log1pf , | 
|  | .Nm pow , | 
|  | .Nm powf | 
|  | .Nd exponential, logarithm, power functions | 
|  | .Sh LIBRARY | 
|  | .Lb libm | 
|  | .Sh SYNOPSIS | 
|  | .In math.h | 
|  | .Ft double | 
|  | .Fn exp "double x" | 
|  | .Ft float | 
|  | .Fn expf "float x" | 
|  | .Ft double | 
|  | .Fn exp2 "double x" | 
|  | .Ft float | 
|  | .Fn exp2f "float x" | 
|  | .Ft double | 
|  | .Fn expm1 "double x" | 
|  | .Ft float | 
|  | .Fn expm1f "float x" | 
|  | .Ft double | 
|  | .Fn log "double x" | 
|  | .Ft float | 
|  | .Fn logf "float x" | 
|  | .Ft double | 
|  | .Fn log10 "double x" | 
|  | .Ft float | 
|  | .Fn log10f "float x" | 
|  | .Ft double | 
|  | .Fn log1p "double x" | 
|  | .Ft float | 
|  | .Fn log1pf "float x" | 
|  | .Ft double | 
|  | .Fn pow "double x" "double y" | 
|  | .Ft float | 
|  | .Fn powf "float x" "float y" | 
|  | .Sh DESCRIPTION | 
|  | The | 
|  | .Fn exp | 
|  | and the | 
|  | .Fn expf | 
|  | functions compute the base | 
|  | .Ms e | 
|  | exponential value of the given argument | 
|  | .Fa x . | 
|  | .Pp | 
|  | The | 
|  | .Fn exp2 | 
|  | and the | 
|  | .Fn exp2f | 
|  | functions compute the base 2 exponential of the given argument | 
|  | .Fa x . | 
|  | .Pp | 
|  | The | 
|  | .Fn expm1 | 
|  | and the | 
|  | .Fn expm1f | 
|  | functions compute the value exp(x)\-1 accurately even for tiny argument | 
|  | .Fa x . | 
|  | .Pp | 
|  | The | 
|  | .Fn log | 
|  | and the | 
|  | .Fn logf | 
|  | functions compute the value of the natural logarithm of argument | 
|  | .Fa x . | 
|  | .Pp | 
|  | The | 
|  | .Fn log10 | 
|  | and the | 
|  | .Fn log10f | 
|  | functions compute the value of the logarithm of argument | 
|  | .Fa x | 
|  | to base 10. | 
|  | .Pp | 
|  | The | 
|  | .Fn log1p | 
|  | and the | 
|  | .Fn log1pf | 
|  | functions compute | 
|  | the value of log(1+x) accurately even for tiny argument | 
|  | .Fa x . | 
|  | .Pp | 
|  | The | 
|  | .Fn pow | 
|  | and the | 
|  | .Fn powf | 
|  | functions compute the value | 
|  | of | 
|  | .Ar x | 
|  | to the exponent | 
|  | .Ar y . | 
|  | .Sh ERROR (due to Roundoff etc.) | 
|  | The values of | 
|  | .Fn exp 0 , | 
|  | .Fn expm1 0 , | 
|  | .Fn exp2 integer , | 
|  | and | 
|  | .Fn pow integer integer | 
|  | are exact provided that they are representable. | 
|  | .\" XXX Is this really true for pow()? | 
|  | Otherwise the error in these functions is generally below one | 
|  | .Em ulp . | 
|  | .Sh RETURN VALUES | 
|  | These functions will return the appropriate computation unless an error | 
|  | occurs or an argument is out of range. | 
|  | The functions | 
|  | .Fn pow x y | 
|  | and | 
|  | .Fn powf x y | 
|  | raise an invalid exception and return an \*(Na if | 
|  | .Fa x | 
|  | < 0 and | 
|  | .Fa y | 
|  | is not an integer. | 
|  | An attempt to take the logarithm of \*(Pm0 will result in | 
|  | a divide-by-zero exception, and an infinity will be returned. | 
|  | An attempt to take the logarithm of a negative number will | 
|  | result in an invalid exception, and an \*(Na will be generated. | 
|  | .Sh NOTES | 
|  | The functions exp(x)\-1 and log(1+x) are called | 
|  | expm1 and logp1 in | 
|  | .Tn BASIC | 
|  | on the Hewlett\-Packard | 
|  | .Tn HP Ns \-71B | 
|  | and | 
|  | .Tn APPLE | 
|  | Macintosh, | 
|  | .Tn EXP1 | 
|  | and | 
|  | .Tn LN1 | 
|  | in Pascal, exp1 and log1 in C | 
|  | on | 
|  | .Tn APPLE | 
|  | Macintoshes, where they have been provided to make | 
|  | sure financial calculations of ((1+x)**n\-1)/x, namely | 
|  | expm1(n\(**log1p(x))/x, will be accurate when x is tiny. | 
|  | They also provide accurate inverse hyperbolic functions. | 
|  | .Pp | 
|  | The function | 
|  | .Fn pow x 0 | 
|  | returns x**0 = 1 for all x including x = 0, \*(If, and \*(Na . | 
|  | Previous implementations of pow may | 
|  | have defined x**0 to be undefined in some or all of these | 
|  | cases. | 
|  | Here are reasons for returning x**0 = 1 always: | 
|  | .Bl -enum -width indent | 
|  | .It | 
|  | Any program that already tests whether x is zero (or | 
|  | infinite or \*(Na) before computing x**0 cannot care | 
|  | whether 0**0 = 1 or not. | 
|  | Any program that depends | 
|  | upon 0**0 to be invalid is dubious anyway since that | 
|  | expression's meaning and, if invalid, its consequences | 
|  | vary from one computer system to another. | 
|  | .It | 
|  | Some Algebra texts (e.g.\& Sigler's) define x**0 = 1 for | 
|  | all x, including x = 0. | 
|  | This is compatible with the convention that accepts a[0] | 
|  | as the value of polynomial | 
|  | .Bd -literal -offset indent | 
|  | p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n | 
|  | .Ed | 
|  | .Pp | 
|  | at x = 0 rather than reject a[0]\(**0**0 as invalid. | 
|  | .It | 
|  | Analysts will accept 0**0 = 1 despite that x**y can | 
|  | approach anything or nothing as x and y approach 0 | 
|  | independently. | 
|  | The reason for setting 0**0 = 1 anyway is this: | 
|  | .Bd -ragged -offset indent | 
|  | If x(z) and y(z) are | 
|  | .Em any | 
|  | functions analytic (expandable | 
|  | in power series) in z around z = 0, and if there | 
|  | x(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0. | 
|  | .Ed | 
|  | .It | 
|  | If 0**0 = 1, then | 
|  | \*(If**0 = 1/0**0 = 1 too; and | 
|  | then \*(Na**0 = 1 too because x**0 = 1 for all finite | 
|  | and infinite x, i.e., independently of x. | 
|  | .El | 
|  | .Sh SEE ALSO | 
|  | .Xr fenv 3 , | 
|  | .Xr math 3 |