본문 바로가기

프로그램언어/C언어

c언어 삼각함수, 역삼각함수, 쌍곡선함수

삼각함수 중 sin(), cos(), tan() 함수는 각도가 아닌 호도를 사용합니다.

호도는 파이(3.141592)를 180도로 계산하는 방식이며 1호도는 "3.141592/180" 입니다.

함수 설명
double sin(double x) sin() 함수는 x의 사인 값을 리턴합니다. 
double cos(double x) cos() 함수는 x의 코사인을 리턴합니다.
double tan(double x) tan() 함수는 x의 탄젠트 값을 리턴합니다.

double sin(double x) 함수

매개변수 :  x는 각도(라디안)

반환 값 : sin 함수는 x의 사인을 반환 합니다. x가 263 보다 크거나 같은 경우 또는-263 보다 작거나 같은 경우 결과에 중요 한 손실이 발생 합니다.

 

사용 예]

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

#define PI 3.14159265 

int main() { 
    double x, d, ret; 

    x = 45;          // 각도 
    d = PI / 180;    // 호도 표현법 1도는 3.141592/180도  
    ret = sin(x*d);  //  각도 * 호도 
    printf("sin( %f ) = %f\n", x*d, ret);

    return 0; 
}

실행 결과]

sin( 0.785398 ) = 0.707107

 

double cos(double x) 함수

매개변수 :  x는 각도(라디안)

반환 값 : x의 코사인입니다. x가 263 보다 크거나 같은 경우 또는-263 보다 작거나 같은 경우 결과에 중요 한 손실이 발생 합니다.

 

사용 예]

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

#define PI 3.14159265 

int main() { 
    double x, d, ret; 

    x = 45;          // 각도 
    d = PI / 180;    // 호도 표현법 1도는 3.141592/180도  
    ret = cos(x*d);  //  각도 * 호도 
    printf("cos( %f ) = %f\n", x*d, ret);

    return 0; 
}

실행 결과]

cos( 0.785398 ) = 0.707107

 

double tan(double x)

매개변수 :  x는 각도(라디안)

반환 값 : tan 함수는 x의 탄젠트를 반환 합니다. x가 263 보다 크거나 같은 경우 또는-263 보다 작거나 같은 경우 결과에 중요 한 손실이 발생 합니다.

 

사용 예]

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

#define PI 3.14159265 

int main() { 
    double x, d, ret; 

    x = 45;          // 각도 
    d = PI / 180;    // 호도 표현법 1도는 3.141592/180도  
    ret = tan(x*d);  //  각도 * 호도 
    printf("tan( %f ) = %f\n", x*d, ret);

    return 0; 
}

실행 결과]

tan( 0.785398 ) = 1.000000

사인, 코사인, 탄젠트을 0도부터 10도씩 증가하면서 360도까지의 값들을 확인해보자.

소스 코드
#include 
#include 

#define PI 3.14159265

int main() {
    double d, ret;
    int x;

    d = PI / 180; 
    for (x = 0; x <= 360; x += 10)
    {
        printf("%d도:sin(%f)=%f  cos(%f)=%f  tan(%f)=%f\n", x, x*d, sin(x*d), x*d, cos(x*d), x*d, tan(x*d));
    }

    return 0;
}

 

역삼각함수 asin(), acos(), atan(), atan2()함수에 대해서 알아보자.

함수 설명
double asin(double x) asin() 함수는 x의 역사인을 리턴합니다. 
double acos(double x) acos() 함수는 x의 역코사인을 리턴합니다.
double atan(double x) atan() 함수는 x의 역탄젠트를 리턴합니다.
double atan2(double y, double x) atan2() 함수는 y/x의 역탄젠트를 리턴합니다.

 

double asin(double x) 함수

매개변수 : x는 -1에서 1 사이여야 합니다.

반환값 : asin() 함수는 x의 역사인을 리턴합니다. x 값은 -1에서 1 사이여야 합니다. x가 -1 미만이거나 1을 초과하면 asin() 함수는 errno를 EDOM으로 설정하고 0의 값을 리턴합니다.

소스코드 실행 결과
#include <stdio.h>
#include <math.h>

int main(void) 
{ 
    double x, ret; 

    x = 0.7; 

    ret = asin(x); 
    printf("asin( %lf ) = %lf\n", x, ret); 

    return 0; 
} 
asin( 0.700000 ) = 0.775397



double acos(double x) 함수

매개변수 : x는 -1과 1 사이의 값입니다.

반환값 : acos() 함수는 x의 역코사인을 리턴합니다. x 값은 -1에서 1 사이여야 합니다(경계값 포함). x가 -1 미만이거나 1을 초과하면 acos()에서는 errno를 EDOM으로 설정하고 0을 리턴합니다.

소스코드 실행 결과

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

int main(void) 
{ 
    double x, ret; 

    x = 0; 

    ret = acos(x); 
    printf("acos( %lf ) = %lf\n", x, ret); 

    return 0; 
} 

acos( 0.000000 ) = 1.570796

 

 

double atan(double x), double atan2(double y, double x) 함수

매개변수 :

x : x 좌표를 나타내는 부동 소수점 값입니다.
y : y 좌표를 나타내는 부동 소수점 값입니다.

반환값 : atan 는-π/2 ~ π/2 라디안 범위에서 x 의 아크탄젠트를 반환 합니다. atan2 는-π에서 π 라디안 까지의 y/x 의 아크탄젠트를 반환 합니다. X 가 0 이면 atan 는 0을 반환 합니다. Atan2 의 두 매개 변수가 모두 0 인 경우 함수는 0을 반환 합니다. 모든 결과는 라디안 단위입니다.

소스코드 실행 결과
#include <stdio.h>
#include <math.h>

int main(void) 
{ 
    double x, y, ret1, ret2; 

    x = 5; 
    y = 5; 

    ret1 = atan(x); 
    ret2 = atan2(y, x); 

    printf("atan( %f ) = %f\n", x, ret1); 
    printf("atan2( %f, %lf ) = %f\n", y, x, ret2); 

    return 0; 
} 
atan( 5.000000 ) = 1.373401 
atan2( 5.000000, 5.000000 ) = 0.785398

 

 

쌍곡선함수의 하이퍼볼릭 사인, 하이퍼볼릭 코사인, 하이퍼볼릭 탄젠트에 대해서 알아보자.

함수 설명
double sinh(double x); sinh() 함수는 x의 쌍곡 사인의 값을 리턴합니다. 
double cosh(double x); cosh() 함수는 x의 쌍곡 코사인을 리턴합니다.
double tanh(double x); tanh() 함수는 x의 쌍곡 탄젠트 값을 리턴합니다. 

 

 

double sinh(double x) 함수

매개변수 : x는 라디안

반환값 : sinh() 함수는 x의 쌍곡 사인의 값을 리턴합니다. 결과가 너무 크면, sinh() 함수는 errno ERANGE로 설정하고 값 HUGE_VAL(x의 값에 따라 양수나 음수)을 리턴합니다.

소스코드 실행 결과

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

#define PI 3.14159265 

int main(void) 
{ 
    double x, ret; 

    x = PI / 2; 
    ret = sinh(x); 

    printf("sinh( %lf ) = %lf\n", x, ret); 

    return 0; 
} 

sinh( 1.570796 ) = 2.301299



double cosh(double x) 함수

매개변수 : x는 라디안

반환값 : cosh() 함수는 x의 쌍곡 코사인을 리턴합니다. 결과가 너무 크면 cosh()에서는 HUGE_VAL의 값을 리턴하고 errno ERANGE로 설정합니다.

소스코드 실행 결과

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

 

int main(void) 
{ 
    double x, ret; 

    x = 1.5; 
    ret = cosh(x); 

    printf("cosh( %lf ) = %lf\n", x, ret); 

    return 0; 
} 

cosh( 1.500000 ) = 2.352410

 

 

double tanh(double x) 함수

매개변수 : x는 라디안

반환값 : tanh() 함수는 x의 쌍곡 탄젠트 값을 리턴합니다. tanh()의 결과는 범위 오류를 포함할 수 없습니다.

소스코드 실행 결과

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

  
#define PI 3.14159265 

int main(void) 
{ 
    double x; 

    x = tanh(PI / 4); 

    printf("tanh( %lf ) = %lf\n", PI / 4, x); 

    return 0; 
} 

tanh( 0.785398 ) = 0.655794