 0dc9e0996a
			
		
	
	
		0dc9e0996a
		
	
	
	
	
		
			
			As the current libc includes a libm implementation, with the new libc this is needed. Unneeded (for the moment) archs have been removed.
		
			
				
	
	
		
			386 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			386 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" 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. 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.24 2008/01/18 21:43:00 das Exp $
 | |
| .\"	$NetBSD: exp.3,v 1.26 2010/05/03 05:35:58 jruoho Exp $
 | |
| .\"
 | |
| .Dd May 3, 2010
 | |
| .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 exp2l ,
 | |
| .Nm expm1 ,
 | |
| .Nm expm1f ,
 | |
| .Nm log ,
 | |
| .Nm logf ,
 | |
| .Nm log2 ,
 | |
| .Nm log2f ,
 | |
| .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 long double
 | |
| .\" .Fn exp2l "long double 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 log2 "double x"
 | |
| .Ft float
 | |
| .Fn log2f "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
 | |
| .Fn exp2f
 | |
| .\" .Fn exp2f ,
 | |
| .\" and
 | |
| .\" .Fn exp2l
 | |
| functions compute the base 2 exponential of the given argument
 | |
| .Fa x .
 | |
| .Pp
 | |
| The
 | |
| .Fn expm1
 | |
| and the
 | |
| .Fn expm1f
 | |
| functions computes the value exp(x)\-1 accurately even for tiny argument
 | |
| .Fa x .
 | |
| .Pp
 | |
| The
 | |
| .Fn log
 | |
| function computes the value of the natural logarithm of argument
 | |
| .Fa x .
 | |
| .Pp
 | |
| The
 | |
| .Fn log10
 | |
| function computes the value of the logarithm of argument
 | |
| .Fa x
 | |
| to base 10.
 | |
| .Pp
 | |
| The
 | |
| .Fn log1p
 | |
| function computes
 | |
| the value of log(1+x) accurately even for tiny argument
 | |
| .Fa x .
 | |
| .Pp
 | |
| The
 | |
| .Fn log2
 | |
| and the
 | |
| .Fn log2f
 | |
| functions compute the value of the logarithm of argument
 | |
| .Fa x
 | |
| to base 2.
 | |
| .Pp
 | |
| The
 | |
| .Fn pow
 | |
| and
 | |
| .Fn powf
 | |
| functions compute the value
 | |
| of
 | |
| .Ar x
 | |
| to the exponent
 | |
| .Ar y .
 | |
| .Sh RETURN VALUES
 | |
| These functions will return the appropriate computation unless an error
 | |
| occurs or an argument is out of range.
 | |
| The functions
 | |
| .Fn exp ,
 | |
| .Fn expm1
 | |
| and
 | |
| .Fn pow
 | |
| detect if the computed value will overflow,
 | |
| set the global variable
 | |
| .Va errno
 | |
| to
 | |
| .Er ERANGE
 | |
| and cause a reserved operand fault on a
 | |
| .Tn VAX .
 | |
| The function
 | |
| .Fn pow x y
 | |
| checks to see if
 | |
| .Fa x
 | |
| \*[Lt] 0 and
 | |
| .Fa y
 | |
| is not an integer, in the event this is true,
 | |
| the global variable
 | |
| .Va errno
 | |
| is set to
 | |
| .Er EDOM
 | |
| and on the
 | |
| .Tn VAX
 | |
| generate a reserved operand fault.
 | |
| On a
 | |
| .Tn VAX ,
 | |
| .Va errno
 | |
| is set to
 | |
| .Er EDOM
 | |
| and the reserved operand is returned
 | |
| by log unless
 | |
| .Fa x
 | |
| \*[Gt] 0, by
 | |
| .Fn log1p
 | |
| unless
 | |
| .Fa x
 | |
| \*[Gt] \-1.
 | |
| .Sh ERRORS
 | |
| The values of
 | |
| .Fn exp x ,
 | |
| .Fn expm1 x ,
 | |
| .Fn exp2 x ,
 | |
| .Fn log x ,
 | |
| and
 | |
| .Fn log1p x ,
 | |
| are exact provided that they are representable.
 | |
| Otherwise the error in these functions is generally below one
 | |
| .Em ulp .
 | |
| The values of
 | |
| .Fn log10 x
 | |
| are within about 2
 | |
| .Em ulps ;
 | |
| an
 | |
| .Em ulp
 | |
| is one
 | |
| .Em Unit
 | |
| in the
 | |
| .Em Last
 | |
| .Em Place .
 | |
| The error in
 | |
| .Fn pow x y
 | |
| is below about 2
 | |
| .Em ulps
 | |
| when its
 | |
| magnitude is moderate, but increases as
 | |
| .Fn pow x y
 | |
| approaches
 | |
| the over/underflow thresholds until almost as many bits could be
 | |
| lost as are occupied by the floating\-point format's exponent
 | |
| field; that is 8 bits for
 | |
| .Tn "VAX D"
 | |
| and 11 bits for IEEE 754 Double.
 | |
| No such drastic loss has been exposed by testing; the worst
 | |
| errors observed have been below 20
 | |
| .Em ulps
 | |
| for
 | |
| .Tn "VAX D" ,
 | |
| 300
 | |
| .Em ulps
 | |
| for
 | |
| .Tn IEEE
 | |
| 754 Double.
 | |
| Moderate values of
 | |
| .Fn pow x y
 | |
| are accurate enough that
 | |
| .Fn pow integer integer
 | |
| is exact until it is bigger than 2**56 on a
 | |
| .Tn VAX ,
 | |
| 2**53 for
 | |
| .Tn IEEE
 | |
| 754.
 | |
| .Sh NOTES
 | |
| The functions 
 | |
| .Fn exp x\ \-\ 1
 | |
| and
 | |
| .Fn log 1\ \+\ x
 | |
| are called
 | |
| .Fn expm1 x
 | |
| and 
 | |
| .Fn logp1 x
 | |
| in
 | |
| .Tn BASIC
 | |
| on the Hewlett\-Packard
 | |
| .Tn HP Ns \-71B
 | |
| and
 | |
| .Tn APPLE
 | |
| Macintosh,
 | |
| .Tn EXP1
 | |
| and
 | |
| .Tn LN1
 | |
| in Pascal,
 | |
| .Fn exp1 x
 | |
| and
 | |
| .Fn log1 x
 | |
| 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 n \
 | |
| Infinity
 | |
| .if t \
 | |
| \(if
 | |
| (not found on a
 | |
| .Tn VAX ) ,
 | |
| and
 | |
| .Em NaN
 | |
| (the reserved
 | |
| operand on a
 | |
| .Tn VAX ) .
 | |
| 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 -filled -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) \(-\*[Gt] 1 as z \(-\*[Gt] 0.
 | |
| .Ed
 | |
| .It
 | |
| If 0**0 = 1, then
 | |
| .if n \
 | |
| infinity**0 = 1/0**0 = 1 too; and
 | |
| .if t \
 | |
| \(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 math 3
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Fn exp ,
 | |
| .Fn log ,
 | |
| .Fn log10
 | |
| and
 | |
| .Fn pow
 | |
| functions conform to
 | |
| .St -ansiC .
 | |
| The
 | |
| .Fn exp2 ,
 | |
| .Fn exp2f ,
 | |
| .Fn expf ,
 | |
| .Fn expm1 ,
 | |
| .Fn expm1f ,
 | |
| .Fn log1p ,
 | |
| .Fn log1pf ,
 | |
| .Fn log2 ,
 | |
| .Fn log2f ,
 | |
| .Fn log10f ,
 | |
| .Fn logf ,
 | |
| and
 | |
| .Fn powf
 | |
| functions conform to
 | |
| .St -isoC-99 .
 | |
| .Sh HISTORY
 | |
| A
 | |
| .Fn exp ,
 | |
| .Fn log
 | |
| and
 | |
| .Fn pow
 | |
| functions
 | |
| appeared in
 | |
| .At v6 .
 | |
| A
 | |
| .Fn log10
 | |
| function
 | |
| appeared in
 | |
| .At v7 .
 | |
| The
 | |
| .Fn log1p
 | |
| and
 | |
| .Fn expm1
 | |
| functions appeared in
 | |
| .Bx 4.3 .
 |