私はfortranに興味深い問題があります。つまり、774840977に3を掛けて1を加えようとすると、一貫した算術ミスをしているように見えます。それは-1970444364を出力します。これは明らかに正しい答えではありません。 さて、私はそれがこの他のいくつかの場所で同じような間違いを犯していると思いますが、それが起こるとこれを見つけるのは難しいです。以下のdoループは通常1〜10,000,000まで実行されますが、この数値がポップアップする値はn = 786431です。そのため、私はあなたの便宜のためにその値に境界を縮小しました。私は、それが整数の制限やFortranのような問題であると想定していますが、Fortranでこれを解決する方法があるのか、それとも何か他の方法でこれを試す必要があるかどうかを知りたいと思います。私がここで何をしているのかについて、私はそれをcollatzチェーンで実行しています。好奇心があればそれらを見ることができます。 [算術ステップのスナップショット] [Fortran算術エラー
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