`ccos`, `ccosf`, `ccosl` — 복소수 코사인
ccos, ccosf, ccosl — 복소수 코사인
실수 코사인은 잘 알지만, 그 인자를 복소수로 확장하면 재미있는 사실이 있어요. 실수축을 따라서는 그냥 실수 코사인처럼 행동하고, 허수축을 따라서는 쌍곡선 코사인처럼 행동해요. 이 복소 코사인을 계산하는 함수가 ccos예요.
본문
ccos 계열 함수는 복소수 z의 복소 코사인을 계산해요.
float complex ccosf( float complex z ); // (1) (since C99)
double complex ccos( double complex z ); // (2) (since C99)
long double complex ccosl( long double complex z ); // (3) (since C99)
// Defined in header <tgmath.h>
#define cos( z ) // (4) (since C99)
1-3) z의 복소 코사인을 계산해요.
4) 타입 제네릭 매크로예요. z가 long double complex면 ccosl, double complex면 ccos, float complex면 ccosf가 호출돼요. 실수·정수 타입이면 대응하는 실수 함수(cosf, cos, cosl)를, 허수 타입이면 실수 cosh와 같은 공식 cos(iy) = cosh(y)을 구현하는 실수 버전을 호출하고 반환 타입은 실수예요.
매개변수
| 매개변수 | 설명 |
|---|---|
z |
복소수 인자 |
반환값
오류가 없으면 z의 복소 코사인을 반환해요.
오류와 특수한 경우는 함수가 ccosh(I*z)로 구현된 것처럼 처리돼요.
Notes
코사인은 복소평면에서 전해석 함수라서 가지 자름이 없어요.
코사인의 수학적 정의는 다음과 같아요.
cos z = (e^iz + e^-iz) / 2
예시
실수축과 허수축 위에서 코사인이 어떻게 행동하는지 확인해 보는 코드예요.
#include <stdio.h>
#include <math.h>
#include <complex.h>
int main(void)
{
double complex z = ccos(1); // behaves like real cosine along the real line
printf("cos(1+0i) = %f%+fi ( cos(1)=%f)\n", creal(z), cimag(z), cos(1));
double complex z2 = ccos(I); // behaves like real cosh along the imaginary line
printf("cos(0+1i) = %f%+fi (cosh(1)=%f)\n", creal(z2), cimag(z2), cosh(1));
}
출력:
cos(1+0i) = 0.540302-0.000000i ( cos(1)=0.540302)
cos(0+1i) = 1.543081-0.000000i (cosh(1)=1.543081)
cos(1+0i)가 실수 cos(1)과 똑같고, cos(0+1i)가 실수 cosh(1)과 일치해요. 실수축에선 코사인, 허수축에선 쌍곡선 코사인으로 행동한다는 성질이 그대로 드러나죠.
표준 참조
- C11: 7.3.5.4 The ccos functions (p: 191), 7.25 (p: 373-375), G.7 (p: 545)
- C99: 7.3.5.4 (p: 173), 7.22 (p: 335-337), G.7 (p: 480)
더 알아보기
- 복소 사인
csin, 복소 탄젠트ctan과 함께 삼각 함수군을 이루는 함수예요. - 역함수는 복소 아크코사인
cacos예요. - 실수 코사인
cos·cosf·cosl과 비교해 보세요. - cppreference의 ccos 원문에서 참조 절을 더 확인할 수 있어요.