`cexp`, `cexpf`, `cexpl` — 복소수 지수 함수
cexp, cexpf, cexpl — 복소수 지수 함수
실수의 지수 함수 exp(x) = eˣ는 익숙한데, 지수를 복소수로 확장하면 오일러 공식 e^(iπ) = -1 같은 아름다운 관계가 나와요. C의 <complex.h>는 복소수 지수 함수 cexp를 제공해요.
본문
cexp 계열 함수는 복소수 z의 자연상수 e 지수(exponential)를 계산해요.
float complex cexpf( float complex z ); // (1) (since C99)
double complex cexp( double complex z ); // (2) (since C99)
long double complex cexpl( long double complex z ); // (3) (since C99)
// Defined in header <tgmath.h>
#define exp( z ) // (4) (since C99)
1-3) z의 복소수 밑 e 지수를 계산해요.
4) 타입 제네릭 매크로예요. z가 long double complex면 cexpl, double complex면 cexp, float complex면 cexpf가 호출돼요. 실수·정수 타입이면 대응하는 실수 함수(expf, exp, expl)가, 허수 타입이면 대응하는 복소 인자 버전이 호출돼요.
매개변수
| 매개변수 | 설명 |
|---|---|
z |
복소수 인자 |
반환값
오류가 없으면 e를 z 제곱한 값 eᶻ를 반환해요.
오류 처리와 특수 값
오류는 math_errhandling에 따라 보고돼요. 구현이 IEEE 부동소수점 산술을 지원한다면 다음 규칙이 적용돼요.
cexp(conj(z)) == conj(cexp(z))z가±0+0i→ 결과는1+0iz가x+∞i(임의의 유한x) → 결과는NaN+NaNi,FE_INVALID발생z가x+NaNi(임의의 유한x) → 결과는NaN+NaNi,FE_INVALID발생 가능z가+∞+0i→ 결과는+∞+0iz가-∞+yi(임의의 유한y) → 결과는+0cis(y)z가+∞+yi(0이 아닌 유한y) → 결과는+∞cis(y)z가-∞+∞i→ 결과는±0±0i(부호는 명시되지 않음)z가+∞+∞i→ 결과는±∞+NaNi,FE_INVALID발생(실수부 부호는 명시되지 않음)z가-∞+NaNi→ 결과는±0±0i(부호는 명시되지 않음)z가+∞+NaNi→ 결과는±∞+NaNi(실수부 부호는 명시되지 않음)z가NaN+0i→ 결과는NaN+0iz가NaN+yi(0이 아닌 임의의y) → 결과는NaN+NaNi,FE_INVALID발생 가능z가NaN+NaNi→ 결과는NaN+NaNi
여기서 cis(y)는 cos(y) + i sin(y)를 뜻해요.
Notes
복소수 지수 함수 eᶻ는 z = x + iy일 때 eˣ·cis(y), 즉 eˣ(cos(y) + i sin(y))와 같아요. 이게 오일러 공식의 실질적인 정의죠.
지수 함수는 복소평면에서 **전해석 함수(entire function)**라서 가지 자름이 없어요.
예시
오일러 공식을 직접 확인해 보는 코드예요.
#include <stdio.h>
#include <math.h>
#include <complex.h>
int main(void)
{
double PI = acos(-1);
double complex z = cexp(I * PI); // Euler's formula
printf("exp(i*pi) = %.1f%+.1fi\n", creal(z), cimag(z));
}
출력:
exp(i*pi) = -1.0+0.0i
e^(iπ) = -1이 그대로 나오는 걸 보면 오일러 공식이 코드 위에서 살아 있음을 확인할 수 있어요.
표준 참조
- C11: 7.3.7.1 The cexp functions (p: 194), 7.25 (p: 373-375), G.6.3.1 (p: 543), G.7 (p: 545)
- C99: 7.3.7.1 (p: 176), 7.22 (p: 335-337), G.6.3.1 (p: 478), G.7 (p: 480)
더 알아보기
- 복소수 자연로그
clog는cexp의 역함수예요. - 실수 버전
exp·expf·expl과 비교해 보세요. - cppreference의 cexp 원문에서 참조 절을 더 확인할 수 있어요.