我在Fortran中编写了这个程序来显示斐波纳契数字,直到第x个术语:
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
我不知道问题是什么,据我所知,逻辑是合理的。我的错误在哪里?
我正在使用gfortran编译器。
答案 0 :(得分:1)
我不是专家,但我确实上了一次课......
显然你正在使用四字节整数(http://www-classes.usc.edu/engr/ce/108/text/fbk01.htm)来表示这些。在1836311903之后,您超过了最大整数值(2147483647)并且计算结果溢出。
您可以通过两种方法更精确地计算斐波纳契数。首先,您可以找到支持8或16字节整数的system / fortran编译器组合。至少对gfortran的支持似乎是system specific。另一种选择是使用像gmp这样的多精度库。