我对fortran有一个有趣的问题。也就是说,当它试图将774840977乘以3并添加一个时,似乎会产生一致的算术错误,它打印出-1970444364,这显然不是正确的答案。 现在,我认为它在其他几个地方犯了同样的错误,但是当它发生时很难找到它。下面的do循环通常会运行1-10,000,000,但此数字弹出的值是n = 786431,所以为了方便起见,我缩小了该值的边界。我认为这是一个整数限制的问题或类似于fortran的问题,但我想知道是否有任何方法可以在fortran中解决这个问题,或者我是否需要在其他方面尝试这个问题。对于我在这里所做的事情的背景,我正在通过collatz链,你可以看看那些好奇的。 [算术步骤快照] [
program Collatzthings
implicit integer*4 (i-o)
implicit doubleprecision*8 (a-h)
integer*4 n0
open(1,file='datac',status='unknown')
e=0
do 100 n0=786431,786431
n=n0
i=0
j=0
do while (n.GT.1)
if (mod(n,2).EQ.0) then
n=.5*n
i=i+1
j=(j+1)
elseif (mod(n,2).EQ.1) then
n=((3*n)+1)
i=i+1
endif
write(6,*)n
end do
b=i
c=j
a=c/b
pause
write(1,*)n0,i,a
100 continue
close(1)
stop
1000 format(7(g12.4,1x))
end
答案 0 :(得分:5)
欢迎来到整数溢出的精彩世界。可以存储在(带符号的♰)4字节整数中的最大数量是2,147,483,647,小于2,324,522,932,3 * 774840977 + 1
的结果
您可以将变量声明为8字节整数,然后溢出只发生在9,223,372,036,854,775,807。
♰ Fortran标准没有无符号整数