EXP(3)

명칭
exp, expf, exp10, exp10f, expm1, expm1f, log, logf, log10, log10f, log1p, log1pf, pow, powf - 지수함수, 대수관계, 누승 함수

프로그램 라이브러리
libm

서식
<math.h> double exp(double x) float expf(float x) double expm1(double x) float expm1f(float x) double log(double x) float logf(float x) double log10(double x) float log10f(float x) double log1p(double x) float log1pf(float x) double pow(double x, double y) float powf(float x, float y)

해설
exp() 함수와 expf() 함수는, 지정의 인수 x 의 지수치를 계산합니다.

expm1() 함수와 expm1f() 함수는, 작은 인수 x 에 붙어 조차 정확하게, exp(x)-1 의 값을 계산합니다.

log() 함수와 logf() 함수는 인수 x 의 자연대수의 값을 계산합니다.

log10() 함수와 log10f() 함수는, 기저 10 에 대해 인수 x 의 대수를 계산합니다.

log1p() 함수와 log1pf() 함수는, 작은 인수 x 에 붙어 조차 log(1+x)의 값을 정확하게 계산합니다.

pow() 함수와 powf() 함수는, 지수 y 에 대해서 x 의 값을 계산합니다.

오차 (라운드 오프등을 (위해)때문에에 의한다)
exp(x), log(x), expm1(x) 및 log1p(x) (은)는, 1 ulp 내부에서 정확합니다. log10(x) (은)는 2 ulps 내부에서 정확합니다. 1 ulp 하 마지막 장소 에서의 1 단위 입니다. pow(x, y) 의 오차는, 크기가 중간 정도 때는 약 2 ulps 미만입니다. pow(x, y) 하지만 오버플로우/언더 플로우(underflow) 해 귀의치에 가까워지면(자) 증대합니다. 마지막에는, 거의 모든 비트가 부동 소수점 지수 필드에 의해 차지할 수 있어 없어집니다. 이것은 VAX D 그럼 8 비트이며, IEEE 754 Double 에서는 11 비트입니다. 이와 같이 큰 결핍은 시험에 의해 밝혀지고 있지 않습니다. 관찰된 최악의 오차는, VAX D 에 대해서는 20 ulps 미만. IEEE 754 Double 에 대해서는 300 ulps 입니다. pow() 중간 정도의 값이, pow(integer, integer) 하지만 정확하게 되기 위해서(때문에) 충분합니다. 최후는, VAX 에 대해서는 2**56 보다 커져, IEEE 754 에 대해서는 2**53 보다 커집니다.

반환값
이러한 함수는, 오차가 발생할까 인수가 범위외의 경우를 제외해, 적절한 계산을 돌려줍니다. 함수 exp(), expm1(), pow() (은)는, 계산된 값이 오버플로우 하는지 어떤지 검출해, 글로벌 변수 errno (을)를 ERANGE (으)로 설정해, VAX 또는 Tahoe 그리고 예약 오퍼랜드 fault를 발생시킵니다. 함수 pow(x, y) (은)는, x < 0 인가 y 하지만 정수가 아닌가 체크합니다. 이 경우, 글로벌 변수 errno (을)를 EDOM (으)로 설정해, VAX (와)과 Tahoe 그리고, 예약 오퍼랜드 fault를 생성합니다. x > 0 이 아닌 경우의 log 와 x > -1 (이)가 아닌 경우의 log1p() (은)는, VAX (와)과 Tahoe 그럼, errno 하지만 EDOM (으)로 설정되어 예약 오퍼랜드 fault가 돌려주어집니다.

주
함수 exp(x)-1 와 log(1+x)는, Hewlett Packard HP-71B 및 APPLE 의 Macintosh 의 BASIC 그럼 expm1 와 logp1 로 불려 Pascal 에서는 EXP1 (와)과 LN1 (으)로 불려 APPLE Macintosh 의 C 에서는 exp1 와 log1 로 불립니다. 이 경우, 이것들은 ((1+x) **n-1) /x 즉 expm1(n*log1p(x)) /x 의 재정적 계산이 x 가 작은 경우에 정확하게 되는 것을 확인하기 위해서 갖춰져 있습니다. 이것들은 정확한 역쌍곡선 함수도 제공합니다.

함수 pow(x, 0) (은)는, 모든 x 에 대해 x**0 = 1 을 돌려줍니다. x 에는, x = 0, infinity (VAX 에는 없습니다), NaN (VAX 의 예약 오퍼랜드)가 포함됩니다. pow 남을 수 있는까지의 실장은, 이러한 모든 경우 또는 몇개의 경우에, x**0 를 미정도리로서 왔던 적이 있습니다. 이것이 반드시 x**0 = 1 을 돌려주는 이유입니다.

1.  x**0 를 계산하기 전에 x 가 0 (또는 무한 또는 )인지를 시험하는 프로그램은 0**0 = 1 인지 어떤지를 배려할 수 없습니다. 0**0 하지만 무효라는 점에 좌우되는 프로그램은, 식의 의미와 무효인 경우, 식의 결과가 컴퓨터 시스템 마다 변화하기 위해(때문에) 의심스러운 것입니다.

2.  산술 텍스트 (예를 들어, Sigler 의 것)에는, x = 0 을 포함해 모든 x 에 대해 x**0 = 1 을 정의하는 것이 있습니다. 이것은, a[0] 을, a[0]*0**0 를 무효로서 거절하는 것이 아니라, 다항식

        p(x) = a[0]*x**0 + a[1]*x**1 + a[2]*x**2 +...+ a[n]*x**n

    의 값을 a[0] 으로서 받아들이는 관행과 호환성이 있습니다.

3.  어널리스트는, x 와 y 가 독립에 0 에 가까워질 때, x**y 가 특정의 값에 가까워지든가 또는 아무것도 가까워지지 않는 것처럼 관련되지 않고, 0**0 = 1 을 받아들입니다. 0**0 = 1 을 받아들이는 이유는 다음과 같습니다.

    x(z)와 y(z)가 z = 0 부근의 z 로 분석적인 함수이며 (누승의 연속으로 확장 가능), 게다가 x(0) = y(0) = 0 의 경우, z → 0 때 x(z) **y(z) → 1 입니다.

4.  0**0 = 1 의 경우, infinity**0 = 1/0**0 = 1 입니다. 그 다음에,**0 = 1 이기도 합니다. 모든 유한 및 무한한 x 에 대해, 즉 x 에 독립에 x**0 = 1 이기 때문입니다.

관련 항목
math(3)

역사
exp(), log() 및 pow() 함수는 AT&T UNIX 그리고 등장했습니다. log10() 함수는 AT&T UNIX 그리고 나타났습니다. log1p() 함수와 expm1() 함수는 4.3BSD 그리고 등장했습니다.