`cexp`, `cexpf`, `cexpl` — 복소수 지수 함수

cexp, cexpf, cexpl — 복소수 지수 함수

실수의 지수 함수 exp(x) = eˣ는 익숙한데, 지수를 복소수로 확장하면 오일러 공식 e^(iπ) = -1 같은 아름다운 관계가 나와요. C의 <complex.h>는 복소수 지수 함수 cexp를 제공해요.

출처: cppreference — 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) 타입 제네릭 매크로예요. zlong double complexcexpl, double complexcexp, float complexcexpf가 호출돼요. 실수·정수 타입이면 대응하는 실수 함수(expf, exp, expl)가, 허수 타입이면 대응하는 복소 인자 버전이 호출돼요.

매개변수

매개변수 설명
z 복소수 인자

반환값

오류가 없으면 ez 제곱한 값 eᶻ를 반환해요.

오류 처리와 특수 값

오류는 math_errhandling에 따라 보고돼요. 구현이 IEEE 부동소수점 산술을 지원한다면 다음 규칙이 적용돼요.

  • cexp(conj(z)) == conj(cexp(z))
  • z±0+0i → 결과는 1+0i
  • zx+∞i(임의의 유한 x) → 결과는 NaN+NaNi, FE_INVALID 발생
  • zx+NaNi(임의의 유한 x) → 결과는 NaN+NaNi, FE_INVALID 발생 가능
  • z+∞+0i → 결과는 +∞+0i
  • z-∞+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(실수부 부호는 명시되지 않음)
  • zNaN+0i → 결과는 NaN+0i
  • zNaN+yi(0이 아닌 임의의 y) → 결과는 NaN+NaNi, FE_INVALID 발생 가능
  • zNaN+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)

더 알아보기

  • 복소수 자연로그 clogcexp의 역함수예요.
  • 실수 버전 exp·expf·expl과 비교해 보세요.
  • cppreference의 cexp 원문에서 참조 절을 더 확인할 수 있어요.