`ccosh`, `ccoshf`, `ccoshl` — 복소수 쌍곡선 코사인

ccosh, ccoshf, ccoshl — 복소수 쌍곡선 코사인

ccos가 허수축 위에서 쌍곡선 코사인처럼 행동한다고 했는데, 반대로 복소 쌍곡선 코사인 ccosh는 실수축 위에서 실수 쌍곡선 코사인처럼, 허수축 위에서는 실수 코사인처럼 행동해요. 이 복소 쌍곡선 코사인을 계산하는 함수를 살펴볼게요.

출처: cppreference — ccosh

본문

ccosh 계열 함수는 복소수 z의 복소 쌍곡선 코사인을 계산해요.

float complex       ccoshf( float complex z );        // (1)  (since C99)
double complex      ccosh( double complex z );        // (2)  (since C99)
long double complex ccoshl( long double complex z );  // (3)  (since C99)

// Defined in header <tgmath.h>
#define cosh( z )                                     // (4)  (since C99)

1-3) z의 복소 쌍곡선 코사인을 계산해요. 4) 타입 제네릭 매크로예요. zlong double complexccoshl, double complexccosh, float complexccoshf가 호출돼요. 실수·정수 타입이면 대응하는 실수 함수(coshf, cosh, coshl)를, 허수 타입이면 실수 cos와 같은 공식 cosh(iy) = cos(y)을 구현하는 실수 버전을 호출하고 반환 타입은 실수예요.

매개변수

매개변수 설명
z 복소수 인자

반환값

오류가 없으면 z의 복소 쌍곡선 코사인을 반환해요.

오류 처리와 특수 값

오류는 math_errhandling에 따라 보고돼요. 구현이 IEEE 부동소수점 산술을 지원한다면 다음 규칙이 적용돼요.

  • ccosh(conj(z)) == conj(ccosh(z))
  • ccosh(z) == ccosh(-z)
  • z+0+0i → 결과는 1+0i
  • z+0+∞i → 결과는 NaN±0i(허수부 부호는 명시되지 않음), FE_INVALID 발생
  • z+0+NaNi → 결과는 NaN±0i(허수부 부호는 명시되지 않음)
  • zx+∞i(0이 아닌 유한 x) → 결과는 NaN+NaNi, FE_INVALID 발생
  • zx+NaNi(0이 아닌 유한 x) → 결과는 NaN+NaNi, FE_INVALID 발생 가능
  • z+∞+0i → 결과는 +∞+0i
  • z+∞+yi(0이 아닌 유한 y) → 결과는 +∞cis(y)
  • z+∞+∞i → 결과는 ±∞+NaNi(실수부 부호는 명시되지 않음), FE_INVALID 발생
  • z+∞+NaN → 결과는 +∞+NaN
  • zNaN+0i → 결과는 NaN±0i(허수부 부호는 명시되지 않음)
  • zNaN+yi(0이 아닌 유한 y) → 결과는 NaN+NaNi, FE_INVALID 발생 가능
  • zNaN+NaNi → 결과는 NaN+NaNi

여기서 cis(y)cos(y) + i sin(y)를 뜻해요.

Notes

쌍곡선 코사인의 수학적 정의는 다음과 같아요.

cosh z = (e^z + e^-z) / 2

쌍곡선 코사인은 복소평면에서 전해석 함수라서 가지 자름이 없어요. 허수 성분에 대해 주기 2πi로 주기적이에요.

예시

실수축과 허수축 위에서 쌍곡선 코사인이 어떻게 행동하는지 확인해 보는 코드예요.

#include <stdio.h>
#include <math.h>
#include <complex.h>

int main(void)
{
    double complex z = ccosh(1);  // behaves like real cosh along the real line
    printf("cosh(1+0i) = %f%+fi (cosh(1)=%f)\n", creal(z), cimag(z), cosh(1));

    double complex z2 = ccosh(I); // behaves like real cosine along the imaginary line
    printf("cosh(0+1i) = %f%+fi ( cos(1)=%f)\n", creal(z2), cimag(z2), cos(1));
}

출력:

cosh(1+0i) = 1.543081+0.000000i (cosh(1)=1.543081)
cosh(0+1i) = 0.540302+0.000000i ( cos(1)=0.540302)

cosh(1+0i)가 실수 cosh(1)과 일치하고, cosh(0+1i)가 실수 cos(1)과 일치해요. ccos와 정확히 반대되는 관계가 성립하죠.

표준 참조

  • C11: 7.3.6.4 The ccosh functions (p: 193), 7.25 (p: 373-375), G.6.2.4 (p: 541), G.7 (p: 545)
  • C99: 7.3.6.4 (p: 175), 7.22 (p: 335-337), G.6.2.4 (p: 476), G.7 (p: 480)

더 알아보기

  • 복소 쌍곡선 사인 csinh, 복소 쌍곡선 탄젠트 ctanh와 함께 쌍곡선 함수군을 이뤄요.
  • 역함수는 복소 아크쌍곡선 코사인 cacosh예요.
  • 실수 쌍곡선 코사인 cosh·coshf·coshl과 비교해 보세요.
  • cppreference의 ccosh 원문에서 참조 절을 더 확인할 수 있어요.