2016-02-04 55 views
0

我想打印Fibonacci序列中名爲「fibonacci.txt」多達200項,但執行後的文件包含了一些錯誤的款項文件,Fibonacci序列出了錯

一些款項均低於預期

  • 我檢查了,它不是任何錯誤的數據類型,我用的無符號長,所以應該不會有任何問題。
  • 我正在使用Cfree 5.0。

我附上代碼和輸出的問題。

int main(){ 
ofstream text_file; 
text_file.open("fibonnacci.txt"); 

unsigned long sum, sum1=1, sum2=1; 

text_file<<sum1<<"\t"<<sum2<<"\t"; 
for(int i = 1; i < 200; i++) { 
    sum = sum1 + sum2; 
    text_file<<sum<<"\n"; 
    /*if(i%5 == 0){ 
     text_file<<"\n"; 
    }*/ 
    sum2 = sum1; 
    sum1 = sum; 

} 
text_file<<"\n"; 

return 0; 
} 

輸出

102334155 
165580141 
267914296 
433494437 
701408733 
1134903170 
1836311903 
2971215073 
512559680 
3483774753 
3996334433 
3185141890 
2886509027 
1776683621 
368225352 
2144908973 
2513134325 
363076002 
2876210327 
3239286329 
1820529360 
764848393 
2585377753 
3350226146 

這些都是一些術語中旬。很明顯,我們可以通過計算位數來看到某些術語比以前的術語少。

+1

您需要詳細瞭解[整數類型](http://en.cppreference.com/w/cpp/language/types#Integer_types)並檢查[他們的範圍](http://en.cppreference.com/w/cpp/language/types#Range_of_values)。 –

+0

我知道無符號長數據類型有大約40億的高範圍,所以不應該有任何問題。 –

+2

如果你有18億和增加29億,結果會是什麼? *超過*無符號32位整數約40億的限制。這就是您在添加時遇到的問題,例如'1836311903'和'2971215073'並獲得'512559680'。 –

回答

2

您的sum變量中有一個溢出。 unsigned long的最大數量爲4294967295.嘗試使用__int64作爲示例

+0

...這也不會讓你更進一步。對於200項來說,double應該是OK。 – gnasher729

+0

@ gnasher729雙工。謝謝......我認爲沒有符號的long就足夠了。但是雙倍給出了十的權力答案,四捨五入的數字我不能得到精確的數字? –

+0

謝謝@ bazz-dee的幫助.. –