역삼각함수란 삼각함수의 역함수를 의미하고,

역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다.

수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데,

 C 언어나 C++ 언어에서는 asin 함수로 구현되어 있다.

<gsl/gsl_math.h> 를 인클루드하면 gsl_math.h 가 자체적으로 <math.h> 를 또 인클루드하므로, <math.h> 를 별도로 인크루드할 필요가 없다.

sinh 와 cosh 의 역함수로 그냥 C 언어의 <math.h> 에서 정의된 asinhacosh 를 써도 되지만. 여기서는 <gsl/gsl_math.h> 에서 정의된 gsl_asinhgsl_acosh 를 써 보았다.

참고로 gsl 이라 함은 GNU Scientific Library 의 줄임글이다.

아래의 소스는 Visual C++ 또는 gcc 로 컴파일되는 소스이다. 실행 결과는 같다.

/*
 * Filename: testArcSineWithGSL.c
 *
 *    Require gsl 1.13 above and Visual C 2010
 *
 *     Or
 *
 *    Require gsl 1.13 above and Cygwin
 *
 * Compile: cl testArcSineWithGSL.c gsl.lib /MD
 * Execute: testArcSineWithGSL
 *
 *  Or
 *
 * Compile: gcc -Wall -I/usr/local/include -c testArcSineWithGSL.c
 *     Link: gcc -o testArcSineGSL -L/usr/local/lib testArcSineWithGSL.o -lgsl
 * Execute: ./testArcSineGSL
 *
 *
 * Date: 2013. 1. 10.
 * Copyright (c) pkim _AT_ scripts.pe.kr
 */

#include <stdio.h>
#include <gsl/gsl_math.h>   // This includes <math.h>


int main(void) {
    double x, y, u, v;

    x = -0.9;
    y = asin(x);
    printf("x = %g\n", x);
    printf("y = asin(%g) = %.9f\n", x, y);
    printf("sin(%.9f) = %g\n", y, sin(y));
    printf("\n");

    x = 1.1;
    u = gsl_acosh(x);
    v = gsl_asinh(x);
    printf("x = %g\n", x);
    printf("u = gsl_acosh(%g) = %.10f\n", x, u);
    printf("v = gsl_asinh(%g) = %.10f\n", x, v);
    printf("\n");

    printf("cosh(u) = cosh(%.10f) = %g\n", u, cosh(u));
    printf("sinh(v) = sinh(%.10f) = %g\n", v, sinh(v));

    return 0;
}

/*
Output:
x = -0.9
y = asin(-0.9) = -1.119769515
sin(-1.119769515) = -0.9

x = 1.1
u = gsl_acosh(1.1) = 0.4435682544
v = gsl_asinh(1.1) = 0.9503469298

cosh(u) = cosh(0.4435682544) = 1.1
sinh(v) = sinh(0.9503469298) = 1.1

*/

 

 

Posted by Scripter

댓글을 달아 주세요