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


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

조회수 261


Hashcode banner summercoding

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close