맥클로린 급수 구현 질문입니다.

조회수 1269회
#include<stdio.h>
#include<math.h>

int approximate()
{
    int precise=0;
    printf("항의 개수(n차)를 설정합니다(1-10): ");
    scanf("%d", &precise);
    return(precise);
}

long int factorial(int n)
 {
    if (n<=1)
        return(1);
    else
        n=n*factorial(n-1);
    return(n);
 }

int sinx()
{
    int i,precise;
    float x,s=0;
    printf("사인 함수를 선택하셨습니다.\n: ");
    printf("정의역에 어느 수를 대입할까요?: ");
    scanf("%f",&x);
        precise=approximate();

            for (i=0;i<=precise;i++)
                {
                    s=s+(pow(-1,i)*((float)pow((double)x,2*i+1)/factorial(2*i+1)));
                }

    printf("sin%f에 대한 함수값은 %f입니다.",x,s);
}

int cosx()
{
    int i,precise;
    float x,s=0;
    printf("코사인 함수를 선택하셨습니다.\n");
    printf("정의역에 어느 수를 대입할까요?: ");
    scanf("%f",&x);
    precise=approximate();

            for (i=0;i<=precise;i++)
                {
                    s=s+(pow(-1,i)*((float)pow((double)x,2*i)/factorial(2*i)));
                }

    printf("cos%f에 대한 함수값은 %f입니다.",x,s);
}

int expx()
{
    int i,precise;
    float x,s=0;
    printf("지수 함수를 선택하셨습니다.\n");
    printf("정의역에 어느 수를 대입할까요?: ");
    scanf("%f",&x);
        precise=approximate();

            for (i=1;i<=precise;i++)
                {
                    s=s+((float)pow((double)x,i)/factorial(i));
                }

    printf("e^%f에 대한 함수값은 %f입니다.",x,1+s);

}

 int main()
 {
     int select=0;
     printf("Maclaurin series Simulator || 맥클로린 급수 시뮬레이터\n");
     printf("Programmed by 청석고\n\n");
     printf("Num1: 사인함수 sinx\n");
     printf("Num2: 코사인함수 cosx\n");
     printf("Num3: 지수함수 e^x\n\n");
     printf("무엇을 실험할까요?: ");
     scanf("%d", &select);
     switch(select)
     {
        case 1:
            sinx();
            break;
        case 2:
            cosx();
            break;
        case 3:
            expx();
            break;
        defaut:
            break;
     }
 }

  1. 테일러 급수 특성상 n차 다항식의 n이 많아질수록 항이 근사되야되는데 n이 5정도부터 cosx에서 값이 너무 벗어나네요. 식은 맞는것같은데 어디가 잘못됬는지 모르겠네요
  2. 항의 개수가 약 12?정도 넘어가면 #INFOO라고 뜨면서 에러가 납니다. 계산 오류인것 같은데 어떻게 해결하는지 알려주실 능력자 구해요..ㅠㅠ
  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)