整数精度

时间:2018-02-18 15:20:20

标签: fortran gfortran

我正在使用Fortran解决Project Euler问题;问题是创建一个Fibonacci序列并找到所有偶数的总和低于400万。这是我写的

implicit none
integer*4::a(1:4000000),sum
integer*4::i,maxc
maxc = 3999999

a(1) = 1
a(2) = 2
do i = 3,maxc,1
   a(i) = a(i-1) + a(i-2)
end do
sum = 0
do i = 1,maxc
   if (mod(a(i),2)==0) then
      sum = sum + a(i)
   end if
end do
print*,sum


end

输出为-1833689714 知道出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

由于您选择的整数类型的大小,您可以表示的数字有限制。 在您的代码中,v1 <- c("Testis_NOA_ID","Testis_NOA_IDSt")2147483647获得gfortran)。 可以证明,您的实施中print *,huge(sum)超出了此限制。 然后,您将获得整数溢出,并且该值变为负数。

简单地使用浮点表示来表示总和,即

i=59

诀窍。