편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.01.12

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


    #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라고 뜨면서 에러가 납니다. 계산 오류인것 같은데 어떻게 해결하는지 알려주실 능력자 구해요..ㅠㅠ