0

xマクローリンのシリーズを使用して、入力として受け取り、出力として与えるコードを作成しようとしていますcos(x).2つの連続した結果の差が小さくなるまでwhileループを使用しています0.001doubleより大きな値に対応するために 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;
}
4

2 に答える 2

0

scanf関数を次のように更新します

scanf("%lf", &x);

powまた、とを確認する必要がありますfact。これらの関数はオーバーフローする可能性があります。特に、factのみを使用しますint

于 2013-10-01T17:52:03.270 に答える