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