テーラー展開
Posted: 2010年12月16日(木) 02:52
テーラー展開を使ってsin(x)の値を求めるプログラムを作ったのですが値が正しくでてきません。どこが間違っているか教えてもらえると有り難いです。
pow関数を使わない方法でお願いします。
#include<stdio.h>
#include<math.h>
double mysin(double,double);
int main(void) {
double x,y,PI=atan(1.0)*4.0,k=1.0;
printf("角度を度数法で入力してください\n");
scanf("%lf",&y);
x=(2.0*PI/360.0)*y;
printf("sin(%lf)=%lf",x,1+mysin(x,k));
return 0;
}
double mysin(double x,double k) {
double my_power(double);
double kaijou(double);
return (my_power(x)/kaijou(k));
}
double my_power(double x) {
double a=1.0,b=a,c=0.0;
int i,j;
for(j=1;j<=8;++j) {
for(i=20-j;1<=i;--i)
a*=x;
if(j%2==0)
b=-b;
c+=b;
}
return c;
}
double kaijou(double k) {
int i,j;
double a=1.0,b=0.0;
for(j=1;j<=8;++j) {
for(i=20-j;1<=i;--i)
a*=i;
b+=a;
}
return b;
}
pow関数を使わない方法でお願いします。
#include<stdio.h>
#include<math.h>
double mysin(double,double);
int main(void) {
double x,y,PI=atan(1.0)*4.0,k=1.0;
printf("角度を度数法で入力してください\n");
scanf("%lf",&y);
x=(2.0*PI/360.0)*y;
printf("sin(%lf)=%lf",x,1+mysin(x,k));
return 0;
}
double mysin(double x,double k) {
double my_power(double);
double kaijou(double);
return (my_power(x)/kaijou(k));
}
double my_power(double x) {
double a=1.0,b=a,c=0.0;
int i,j;
for(j=1;j<=8;++j) {
for(i=20-j;1<=i;--i)
a*=x;
if(j%2==0)
b=-b;
c+=b;
}
return c;
}
double kaijou(double k) {
int i,j;
double a=1.0,b=0.0;
for(j=1;j<=8;++j) {
for(i=20-j;1<=i;--i)
a*=i;
b+=a;
}
return b;
}