2013-07-29 82 views
0

我已經編寫了一個簡單的代碼來試試我的新計算機上的編譯器是否正常工作。編譯/構建項目沒有問題。該程序應該通過遞歸計算階乘,它工作正常,但只有13!(它只有大約x * 10^9,double應該有x * 10^308的範圍)。如果我嘗試更高的數字,它會給我帶來負面的結果等等。我找不出導致問題的原因。在我的舊電腦上(32位win XP),相同的代碼正確工作到170! (但我不確定它是否完全一樣,因爲我的數據的主要部分已經丟失)。 Sholud我重新安裝編譯器或設置有問題嗎?或者我的代碼不正確?C++「double」變量溢出太早

我現在的電腦有64位的win7和AMD處理器。我現在正在使用MS Visual Studio 2012更新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; 
    } 

回答

2

它不應該是:

double factorial(double x) 

否則將你的電話號碼轉換爲int和溢出。

編輯:你有警告禁用?我認爲階乘(x)呼叫應該發出關於失去精確度的警告......

+0

是的,絕對是。謝謝。我覺得索姆笨拙,因爲這是真正的基本錯誤,我沒有注意到它... – Adam