2014-06-27 15 views
1

後,我在Fortran語言寫了這個程序來顯示Fibonacci數達x個期限:Fibonacci數變成負一定期限

program fibonacci 
implicit none 
integer :: x,p,c,i,t !initializes limit, previous, current, iterative, and temp 
print *, "List the first x fibonacci numbers: " 
read *, x  !reads the limit 
p=0   !sets previous to zero 
c=1   !sets current to 1 
do i=1,x 
    print *, c !prints the current fibonacci number 
t = c  !sets the temporary variable to the current 
c = c + p !sets the current to the current plus the previous 
p = t  !sets the previous to the temporary value 
end do   !iterates until it reaches the limit 'x' 
end program fibonacci 

當我編譯並運行它,然後輸入號碼10,它作爲預期

List the first x fibonacci numbers: 
10 
     1 
     1 
     2 
     3 
     5 
     8 
     13 
     21 
     34 
     55 

但是當我進入50:

List the first x fibonacci numbers: 
50 
     1 
     1 
     2 
     3 
     5 
     8 
     13 
     21 
     34 
     55 
     89 
    144 
    233 
    377 
    610 
    987 
    1597 
    2584 
    4181 
    6765 
    10946 
    17711 
    28657 
    46368 
    75025 
    121393 
    196418 
    317811 
    514229 
    832040 
1346269 
2178309 
3524578 
5702887 
9227465 
14930352 
24157817 
39088169 
63245986 
102334155 
165580141 
267914296 
433494437 
701408733 
1134903170 
1836311903 
-1323752223 
512559680 
-811192543 
-298632863 

我不知道是什麼PROBL就我所知,他的邏輯是健全的。我的錯誤在哪裏?

我正在使用gfortran編譯器。

+3

您需要比普通的舊'integer'更大的整數 - 請參閱http://stackoverflow.com/questions/2390395 – RichieHindle

回答

1

我不是FORTRAN專家,但我沒有去上課一次......

顯然,你使用這些四個字節的整數(http://www-classes.usc.edu/engr/ce/108/text/fbk01.htm)。之後,1836311903你超過了最大整數值(2147483647),並且計算溢出。

您有兩種方法可以更精確地計算斐波納契數字。首先,您可以找到一個支持8或16字節整數的系統/ Fortran編譯器組合。至少支持gfortran,似乎是system specific。另一種選擇是使用多精度庫,如gmp

+4

8字節整數就足夠了,或者16字節通常可用。在深入研究多精度庫之前,至少應該嘗試一下。 –