복소수의 실수부: 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은 타입 제네릭 매크로예요. zfloat 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

실제 출력은 위와 같아요. 복소수 리터럴에서 creal1.0을, cimag2.0을 꺼내서 %f%+fi 포맷으로 이어 붙인 값이에요. cimag와 짝으로 쓰는 게 흔한 패턴입니다.

더 알아보기

  • cimag: 복소수의 허수부를 반환.
  • conj: 켤레 복소수를 만듦.