<complex.h> — 복소수 연산 라이브러리
공학 계산이나 신호 처리에서는 복소수를 직접 다룰 일이 많아요. C의 <complex.h>는 double complex, float complex, long double complex 같은 복소수 타입을 제공하고, 절댓값·편각·켤레·지수·로그·삼각·쌍곡선 함수까지 폭넓게 지원해요. 이 헤더가 제공하는 타입, 상수, 함수들을 한눈에 정리해요.
출처: cppreference
본문
이 헤더는 복소수 산술 라이브러리(complex number arithmetic library)의 일부예요.
타입과 상수(Types and constants)
| 종류 |
이름 |
설명 |
| 타입 매크로 |
imaginary |
허수 타입 매크로 (키워드 매크로) |
| 타입 매크로 |
complex |
복소 타입 매크로 (키워드 매크로) |
| 허수 단위 상수 |
_Imaginary_I |
허수 단위 상수 i |
| 복소 단위 상수 |
_Complex_I |
복소 단위 상수 i |
| 상수 매크로 |
I |
복소 또는 허수 단위 상수 i |
조작(Manipulation)
| 함수 |
설명 |
CMPLX CMPLXF CMPLXL |
실수 부분과 허수 부분으로 복소수를 구성 (함수 매크로, C11) |
creal crealf creall |
복소수의 실수 부분 계산 (함수, C99) |
cimag cimagf cimagl |
복소수의 허수 부분 계산 (함수, C99) |
cabs cabsf cabsl |
복소수의 크기(절댓값) 계산 (함수, C99) |
carg cargf cargl |
복소수의 위상각 계산 (함수, C99) |
conj conjf conjl |
복소 켤레 계산 (함수, C99) |
cproj cprojf cprojl |
리만 구면 위로의 사영 계산 (함수, C99) |
지수 함수(Exponential functions)
| 함수 |
설명 |
cexp cexpf cexpl |
복소 밑 e 지수 계산 (함수, C99) |
clog clogf clogl |
복소 자연로그 계산 (함수, C99) |
거듭제곱 함수(Power functions)
| 함수 |
설명 |
cpow cpowf cpowl |
복소 거듭제곱 계산 (함수, C99) |
csqrt csqrtf csqrtl |
복소 제곱근 계산 (함수, C99) |
삼각 함수(Trigonometric functions)
| 함수 |
설명 |
csin csinf csinl |
복소 사인 계산 (함수, C99) |
ccos ccosf ccosl |
복소 코사인 계산 (함수, C99) |
ctan ctanf ctanl |
복소 탄젠트 계산 (함수, C99) |
casin casinf casinl |
복소 아크사인 계산 (함수, C99) |
cacos cacosf cacosl |
복소 아크코사인 계산 (함수, C99) |
catan catanf catanl |
복소 아크탄젠트 계산 (함수, C99) |
쌍곡선 함수(Hyperbolic functions)
| 함수 |
설명 |
csinh csinhf csinhl |
복소 쌍곡 사인 계산 (함수, C99) |
ccosh ccoshf ccoshl |
복소 쌍곡 코사인 계산 (함수, C99) |
ctanh ctanhf ctanhl |
복소 쌍곡 탄젠트 계산 (함수, C99) |
casinh casinhf casinhl |
복소 아크쌍곡 사인 계산 (함수, C99) |
cacosh cacoshf cacoshl |
복소 아크쌍곡 코사인 계산 (함수, C99) |
catanh catanhf catanhl |
복소 아크쌍곡 탄젠트 계산 (함수, C99) |
시놉시스(Synopsis)
#define __STDC_VERSION_COMPLEX_H__ 202311L
#define complex _Complex
#define imaginary /* implementation-defined */
#define _Imaginary_I /* implementation-defined */
#define _Complex_I /* implementation-defined */
#define I _Complex_I
#pragma STDC CX_LIMITED_RANGE /*on-off-switch*/
double complex cacos(double complex z);
float complex cacosf(float complex z);
long double complex cacosl(long double complex z);
double complex casin(double complex z);
float complex casinf(float complex z);
long double complex casinl(long double complex z);
double complex catan(double complex z);
float complex catanf(float complex z);
long double complex catanl(long double complex z);
double complex ccos(double complex z);
float complex ccosf(float complex z);
long double complex ccosl(long double complex z);
double complex csin(double complex z);
float complex csinf(float complex z);
long double complex csinl(long double complex z);
double complex ctan(double complex z);
float complex ctanf(float complex z);
long double complex ctanl(long double complex z);
double complex cacosh(double complex z);
float complex cacoshf(float complex z);
long double complex cacoshl(long double complex z);
double complex casinh(double complex z);
float complex casinhf(float complex z);
long double complex casinhl(long double complex z);
double complex catanh(double complex z);
float complex catanhf(float complex z);
long double complex catanhl(long double complex z);
double complex ccosh(double complex z);
float complex ccoshf(float complex z);
long double complex ccoshl(long double complex z);
double complex csinh(double complex z);
float complex csinhf(float complex z);
long double complex csinhl(long double complex z);
double complex ctanh(double complex z);
float complex ctanhf(float complex z);
long double complex ctanhl(long double complex z);
double complex cexp(double complex z);
float complex cexpf(float complex z);
long double complex cexpl(long double complex z);
double complex clog(double complex z);
float complex clogf(float complex z);
long double complex clogl(long double complex z);
double cabs(double complex z);
float cabsf(float complex z);
long double cabsl(long double complex z);
double complex cpow(double complex x, double complex y);
float complex cpowf(float complex x, float complex y);
long double complex cpowl(long double complex x, long double complex y);
double complex csqrt(double complex z);
float complex csqrtf(float complex z);
long double complex csqrtl(long double complex z);
double carg(double complex z);
float cargf(float complex z);
long double cargl(long double complex z);
double cimag(double complex z);
float cimagf(float complex z);
long double cimagl(long double complex z);
double complex CMPLX(double x, double y);
float complex CMPLXF(float x, float y);
long double complex CMPLXL(long double x, long double y);
double complex conj(double complex z);
float complex conjf(float complex z);
long double complex conjl(long double complex z);
double complex cproj(double complex z);
float complex cprojf(float complex z);
long double complex cprojl(long double complex z);
double creal(double complex z);
float crealf(float complex z);
long double creall(long double complex z);
// Only if the implementation defines __STDC_IEC_60559_TYPES__ and additionally the user
// code defines __STDC_WANT_IEC_60559_TYPES_EXT__ before any inclusion of <complex.h>:
#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
/*_FloatN*/ complex /*cacosfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*cacosfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*casinfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*casinfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*catanfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*catanfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*ccosfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*ccosfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*csinfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*csinfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*ctanfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*ctanfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*cacoshfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*cacoshfNx*/( /*_FloatNx*/ complex z);
/*_FloatN*/ complex /*casinhfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*casinhfNx*/( /*_FloatNx*/ complex z);
/*_FloatN*/ complex /*catanhfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*catanhfNx*/( /*_FloatNx*/ complex z);
/*_FloatN*/ complex /*ccoshfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*ccoshfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*csinhfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*csinhfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*ctanhfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*ctanhfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*cexpfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*cexpfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*clogfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*clogfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ /*cabsfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ /*cabsfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*cpowfN*/(/*_FloatN*/ complex x, /*_FloatN*/ complex y);
/*_FloatNx*/ complex /*cpowfNx*/(/*_FloatNx*/ complex x, /*_FloatNx*/ complex y);
/*_FloatN*/ complex /*csqrtfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*csqrtfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ /*cargfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ /*cargfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ /*cimagfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ /*cimagfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*CMPLXFN*/(/*_FloatN*/ x, /*_FloatN*/ y);
/*_FloatNx*/ complex /*CMPLXFNX*/(/*_FloatNx*/ x, /*_FloatNx*/ y);
/*_FloatN*/ complex /*conjfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*conjfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ complex /*cprojfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ complex /*cprojfNx*/(/*_FloatNx*/ complex z);
/*_FloatN*/ /*crealfN*/(/*_FloatN*/ complex z);
/*_FloatNx*/ /*crealfNx*/(/*_FloatNx*/ complex z);
#endif
시놉시스를 보면 복소수 타입이 double complex, float complex, long double complex처럼 세 배정도를 지원하고, 각 함수마다 f/l 접미사 변형이 있음을 알 수 있어요. _FloatN/_FloatNx 확장 타입 함수들은 __STDC_WANT_IEC_60559_TYPES_EXT__가 정의된 경우에만 노출돼요.
더 알아보기
- 실수 함수 전반에 대한
<math.h> 문서와 함께 보면 복소/실수 함수의 대응 관계가 분명해져요.
- 각 복소수 함수(
cabs, carg, CMPLX 등)의 세부는 복소수 라이브러리 문서를 참고해요.