복소수의 실수부: creal(C99)
복소수의 실수부: creal(C99)
복소수에서 실수부만 따로 꺼내고 싶을 때가 있어요. 출력 포맷을 맞추거나, 어떤 연산의 결과로 실수부가 원하는 값인지 확인할 때요. 이때 쓰는 함수가 creal이에요. 이름 그대로 복소수의 실수부(real part)를 돌려줍니다.
출처: cppreference
본문
시그니처
<complex.h> 헤더에 정의돼 있어요.
| 형태 | 주석 |
|---|---|
float crealf ( float complex z ); |
(1) C99부터 |
double creal ( double complex z ); |
(2) C99부터 |
long double creall ( long double complex z ); |
(3) C99부터 |
#define creal(z) |
(4) C99부터, <tgmath.h> |
동작 방식
z의 실수부를 반환해요.
(4)의 creal은 타입 제네릭 매크로예요. z가 float complex, double complex, long double complex, 또는 정수 타입이든 어떤 타입이든 인자에 맞는 float/double/long double 버전 중 하나를 알아서 호출해 줍니다.
이 함수는 모든 가능한 입력에 대해 완전히 규정돼 있는 함수고, math_errhandling에 설명된 어떤 오류에도 걸리지 않아요.
주의할 점
임의의 복소수 변수 z에 대해 다음 식이 항상 성립해요.
z == creal(z) + I * cimag(z)
복소수를 실수부와 허수부로 분리했다가 다시 합치면 원래 값으로 돌아온다는 뜻이에요.
예제
복소수를 만들고 실수부와 허수부를 분리해 출력하는 코드예요.
#include <stdio.h>
#include <complex.h>
int main(void)
{
double complex z = 1.0 + 2.0*I;
printf("%f%+fi\n", creal(z), cimag(z));
}
출력:
1.000000+2.000000i
실제 출력은 위와 같아요. 복소수 리터럴에서 creal은 1.0을, cimag는 2.0을 꺼내서 %f%+fi 포맷으로 이어 붙인 값이에요. cimag와 짝으로 쓰는 게 흔한 패턴입니다.
더 알아보기
cimag: 복소수의 허수부를 반환.conj: 켤레 복소수를 만듦.