`casin`, `casinf`, `casinl` — 복소수 아크사인

casin, casinf, casinl — 복소수 아크사인

실수 사인의 역함수 asin은 정의역이 [-1, 1]로 제한되지만, 복소수까지 확장하면 그 밖의 값에서도 잘 정의돼요. 다만 복소 평면에서는 다가 함수가 되어 가지 자름이 필요해요. 이 복소 아크사인을 계산하는 함수가 casin이에요.

출처: cppreference — casin

본문

casin 계열 함수는 실수축을 따라 구간 [−1,+1] 바깥에 가지 자름을 두고, 복소수 z의 복소 아크사인을 계산해요.

float complex       casinf( float complex z );        // (1)  (since C99)
double complex      casin( double complex z );        // (2)  (since C99)
long double complex casinl( long double complex z );  // (3)  (since C99)

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

1-3) 실수축을 따라 구간 [−1,+1] 바깥에서 가지 자름을 갖는 z의 복소 아크사인을 계산해요. 4) 타입 제네릭 매크로예요. zlong double complexcasinl, double complexcasin, float complexcasinf가 호출돼요. z가 실수·정수면 대응하는 실수 함수(asinf, asin, asinl)를 호출해요. z가 허수면 asinh의 실수 버전을 호출해 공식 arcsin(iy) = i·arsinh(y)를 구현하고, 매크로의 반환 타입은 허수예요.

매개변수

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

반환값

오류가 없으면 z의 복소 아크사인을 반환하는데, 허수축 방향으로 무한히 뻗은 띠이면서 실수축 방향으로는 구간 [−π/2; +π/2] 안쪽이에요.

오류와 특수한 경우는 함수가 -I * casinh(I*z)로 구현된 것처럼 처리돼요.

Notes

역사인(아크사인)은 다가 함수라서 가지 자름이 필요해요. 관례적으로 실수축의 선분 (-∞,-1)(1,∞)에 자름을 둬요.

아크사인의 주값의 수학적 정의는 다음과 같아요.

arcsin z = -i·ln(iz + √(1-z²))

모든 z에 대해 arcsin(z) = arccos(-z) - π/2가 성립해요.

예시

가지 자름의 양쪽에서 값이 어떻게 달라지는지 확인해 보는 코드예요.

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

int main(void)
{
    double complex z = casin(-2);
    printf("casin(-2+0i) = %f%+fi\n", creal(z), cimag(z));

    double complex z2 = casin(conj(-2)); // or CMPLX(-2, -0.0)
    printf("casin(-2-0i) (the other side of the cut) = %f%+fi\n", creal(z2), cimag(z2));

    // for any z, asin(z) = acos(-z) - pi/2
    double pi = acos(-1);
    double complex z3 = csin(cacos(conj(-2))-pi/2);
    printf("csin(cacos(-2-0i)-pi/2) = %f%+fi\n", creal(z3), cimag(z3));
}

출력:

casin(-2+0i) = -1.570796+1.316958i
casin(-2-0i) (the other side of the cut) = -1.570796-1.316958i
csin(cacos(-2-0i)-pi/2) = 2.000000+0.000000i

두 출력이 허수부 부호만 정반대인 걸 보면 가지 자름을 가로지르면 값이 점프한다는 걸 알 수 있어요. 마지막 줄은 asin(z) = acos(-z) - π/2 관계를 이용해 다시 값 2로 되돌아오는 걸 확인해 줘요.

표준 참조

  • C11: 7.3.5.2 The casin functions (p: 190), 7.25 (p: 373-375), G.7 (p: 545)
  • C99: 7.3.5.2 (p: 172), 7.22 (p: 335-337), G.7 (p: 480)

더 알아보기

  • 복소 아크코사인 cacos, 복소 아크탄젠트 catan과 함께 역삼각 함수군을 이뤄요.
  • 원함수는 복소 사인 csin이에요.
  • 실수 아크사인 asin·asinf·asinl과 비교해 보세요.
  • cppreference의 casin 원문에서 참조 절을 더 확인할 수 있어요.