`cabs`, `cabsf`, `cabsl` — 복소수 크기
cabs, cabsf, cabsl — 복소수 크기
직각좌표로 표현된 복소수 x + yi가 있을 때, 원점에서 그 점까지의 거리(크기)를 구하고 싶을 때가 있어요. 좌표평면에서 생각하면 √(x² + y²)이죠. C의 <complex.h>는 이 복소수의 크기(absolute value, 일명 norm·modulus·magnitude)를 구하는 cabs 함수를 제공해요.
본문
cabs 계열 함수는 복소수 z의 절댓값(크기)을 계산해요.
float cabsf( float complex z ); // (1) (since C99)
double cabs( double complex z ); // (2) (since C99)
long double cabsl( long double complex z ); // (3) (since C99)
// Defined in header <tgmath.h>
#define fabs( z ) // (4) (since C99)
1-3) z의 복소수 절댓값(norm, modulus, magnitude라고도 불러요)을 계산해요.
4) 타입 제네릭 매크로예요. z가 long double complex 또는 long double imaginary면 cabsl, float complex 또는 float imaginary면 cabsf, double complex 또는 double imaginary면 cabs가 호출돼요. 실수·정수 타입이면 대응하는 실수 버전 fabs가 호출돼요.
매개변수
| 매개변수 | 설명 |
|---|---|
z |
복소수 인자 |
반환값
오류가 없으면 z의 절댓값(norm, magnitude)을 반환해요.
오류와 특수한 경우는 함수가 hypot(creal(z), cimag(z))로 구현된 것처럼 처리돼요. 즉 두 성분을 제곱해 더한 뒤 제곱근을 구하는 방식과 같은 동작이에요.
예시
복소수를 직각좌표와 극좌표로 함께 출력해 보는 코드예요.
#include <stdio.h>
#include <complex.h>
int main(void)
{
double complex z = 1.0 + 1.0*I;
printf("%.1f%+.1fi cartesian is rho=%f theta=%f polar\n",
creal(z), cimag(z), cabs(z), carg(z));
}
출력:
1.0+1.0i cartesian is rho=1.414214 theta=0.785398 polar
1+i의 크기 √2 ≈ 1.414214와 위상각 π/4 ≈ 0.785398이 나와요. 극좌표로는 rho(반지름)가 cabs, theta(각도)가 carg가 담당한다는 걸 함께 보여주는 좋은 예시죠.
표준 참조
- C11: 7.3.8.1 The cabs functions (p: 195), 7.25 (p: 373-375), G.7 (p: 545)
- C99: 7.3.8.1 (p: 177), 7.22 (p: 335-337), G.7 (p: 480)
더 알아보기
- 복소수의 위상각을 구하는
carg와 짝을 이뤄 극좌표 변환을 완성해요. - 정수 절댓값
abs·labs·llabs, 실수 절댓값fabs와 대비해 보세요. - 두 실수의 제곱합의 제곱근을 구하는
hypot이cabs의 구현 원리예요. - cppreference의 cabs 원문에서 참조 절을 더 확인할 수 있어요.