`ccos`, `ccosf`, `ccosl` — 복소수 코사인

ccos, ccosf, ccosl — 복소수 코사인

실수 코사인은 잘 알지만, 그 인자를 복소수로 확장하면 재미있는 사실이 있어요. 실수축을 따라서는 그냥 실수 코사인처럼 행동하고, 허수축을 따라서는 쌍곡선 코사인처럼 행동해요. 이 복소 코사인을 계산하는 함수가 ccos예요.

출처: cppreference — 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) 타입 제네릭 매크로예요. zlong double complexccosl, double complexccos, float complexccosf가 호출돼요. 실수·정수 타입이면 대응하는 실수 함수(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 원문에서 참조 절을 더 확인할 수 있어요.