0

新しいコンピューターでコンパイラーが正常に動作するかどうかを試すための簡単なコードを作成しました。プロジェクトのコンパイル/ビルドに問題はありません。プログラムは再帰によって階乗を計算する必要があり、正常に動作しますが、13 未満でしか機能しません!(x*10^9 程度であり、double の範囲は x*10^308 までである必要があります)。より高い数値を試すと、否定的な結果などが得られます。問題の原因がわかりません。私の古いコンピューター (32 ビット Windows XP) では、同じコードが 170 まで正しく動作しました。(ただし、データの主要部分が失われたため、まったく同じかどうかはわかりません)。コンパイラを再インストールする必要がありますか、それとも設定に問題がありますか? それとも私のコードが間違っていますか?

私の現在の PC には 64 ビットの win7 と AMD プロセッサが搭載されています。現在、MS Visual Studio 2012 update 2 を使用しています。

私はC ++の初心者で、英語が下手で申し訳ありません。

これが私のコードです:

    #include <iostream>

    using namespace std;

    int factorial(int x){
        if (x==2){ return 2;}
        return x*factorial(x-1);
    }

    int main()
    {
        double x,v;
        cout<<"insert number: ";
        cin>>x;
        v=factorial(x);
        cout<<"\n"<<v<<"\n";
        system("pause");
        return 0;
    }
4

1 に答える 1

2

そうではありませんか:

double factorial(double x)

そうしないと、数値が int とオーバーフローに変換されます。

編集: 警告を無効にしていますか? factorial(x) 呼び出しは、精度が失われるという警告を発するはずだと思います...

于 2013-07-29T16:40:44.853 に答える