x
マクローリンのシリーズを使用して、入力として受け取り、出力として与えるコードを作成しようとしていますcos(x)
.2つの連続した結果の差が小さくなるまでwhileループを使用しています0.001
。double
より大きな値に対応するために type を使用しています。コードx
は が範囲内[-2,2]
にある場合に機能しますが、 がx
この範囲より大きいか小さい場合、出力は です-1.#IND00
。なぜそれが起こっているのですか?出力値が範囲外ですか?どうすればこれを修正できますか??
私のコードは:
#include <stdio.h>
double abs(double a);
double power(double p, int q);
int fact(int a);
int main()
{
int i=1,j=2*i;
double x,s=1.0,p,l=0.001;
printf("Enter x: ");
scanf("%lf", &x);
p = s+ power(-1,i) * power(x,j) / fact(j);
while (abs(p-s)>l){
i++; j=2*i;
s=p;
p = s+ power(-1,i) * power(x,j) / fact(j);
}
printf("cos(%f) = %f", x,p);
return 0;
}
double abs(double a)
{
if (a>=0) return a;
else return (-a);
}
double power(double p, int q)
{
int i;
double a=1.0;
for (i=0; i<q; i++){
a=a*p;
}
return a;
}
int fact(int a)
{
int i,p=1;
if (a==0 || a==1) return 1;
else
while (a!=1){
p=p*a;
a--;
}
return p;
}