0

「テイラー級数」を計算するプログラムを作成していて、出力として「inf」を取得しています。プログラムが終了しておらず、すべてがまだ正常に機能していませんが、出力を確認できるようにしたいと思います。出力を短くしたり、表示したりする方法はありますか?助けてくれてありがとう。

#include <iostream>
#include <math.h>
using namespace std;

long double taylorSeries(long double input, int degree);
long int factorial(int input);
long double derivative(long double input);

int main(int argc, const char * argv[])
{

    long double taylorInput = cos(0);    

    cout << taylorSeries(taylorInput, 3) << endl;

    return 0;
}

// taylor series function
long double taylorSeries(long double input, int degree){

    long double i = 0;
    long double accumulation = 0;


    while (i < degree) {
        derivative(input);
        accumulation += (pow(input, i))/factorial(i); 
        i++;
    }

    return accumulation;
}

// function to calculate factorial
long int factorial(int input){

    long int factorial = 0;

    if (input == 1) {
        factorial = 0;
    }

    while (input > 0) {
        if (factorial == 0) {
            factorial = input * (input - 1);
            input -= 2;
        }

        else if (input > 0) {
            factorial *= input;
            input--;
        }


    }
    return factorial;
}

long double derivative(long double input){
     long double derivativeResult = 0;

    derivativeResult = (((input + .001) - (input)) / .001);

    return derivativeResult;
}
4

3 に答える 3

3

あなたはaccumulation += (pow(input, i))/factorial(i);0で割っています。

階乗関数では、0の場合が欠落しており、0の階乗は1です。

編集:1の階乗も0ではありません。先に進む前に、まずその階乗関数を確認する必要があります。

于 2013-03-06T01:58:20.563 に答える
2

あなたの階乗関数は少し厄介です。これを試して:

long factorial( long input ) {
    long output = 1;
    for( long i = 2; i <= input; ++ i ) {
        output *= i;
    }
    return output;
}
于 2013-03-06T02:05:59.817 に答える
1

double値infは、後続の数学演算を実行するときにオーバーフローする中間計算に関する情報が失われないようにするための特別な値です。一連の操作が生成infされると、誤った値である有効な数値を生成するのではなく、「固定」されます。

取得する一般的な方法infは、浮動小数点の例外ではない環境でゼロで除算することです。だから、最初ののためになりx = 1.0 / 0.0 ... (any operations here)ます。残りの結果を確認する前に、問題の計算を見つけて削除する必要があります。infinf

于 2013-03-06T01:59:29.797 に答える