各位老师,大家好,本人在Fortran编程中选用一个单精度实型变量进行逐次累加计数,每次都+1,总数目为54000000,但是加至16777216时,该变量的值无法继续增加,一直保持不变。因此,我单独把这一段程序取了出来进行测试,发现计算结果更加迷惑了,发现16777216是个门槛,逐次+1越不过去,但是+2却可以。我也研究了下单精度的计算机存储方式,总数目的大小也没有超过单精度的存储范围,一定是精度的问题,但还是不能想清楚,希望各位老师帮忙解决,测试代码和结果如下:
[Fortran] 纯文本查看 复制代码 Program Test
Real A,B,C,D
A=16777215
B=1
C=2
D=3
Write(*,*) A,B,C,D
Write(*,*) A+B,A+C,A+D
A=16777216
B=1
C=2
D=3
Write(*,*) A,B,C,D
Write(*,*) A+B,A+C,A+D
End Program Test
测试结果:
1.6777215E+07 1.000000 2.000000 3.000000
1.6777216E+07 1.6777216E+07 1.6777218E+07
1.6777216E+07 1.000000 2.000000 3.000000
1.6777216E+07 1.6777218E+07 1.6777220E+07
请按任意键继续. . .
|