当我在GNU gfortran编译器中使用FORTRAN 77运行某些程序时,我多次遇到相同的问题,我希望有人能对此有所了解。我想要的值应该是〜1,但它会在程序结尾写出超过10 ^ 100的值。对于我来说,这通常是一个仅限于数组的问题。当我之前在程序的某个阶段写出不正确的值时,不正确的值通常就会消失(在解决问题时不可避免地会发生这种情况。)
我尝试了显式初始化数组,并在程序中尝试了一些数组绑定检查以及一些内部逻辑检查。对我和我的研究主管来说,这个问题似乎是病态的。
WRITE(*,*)"OK9999", INV,INVV
vs
WRITE(*,*)"OK9999", INV,INVV,NP,I1STOR(NP),I2STOR(NP)
对于变量INV和INVV,前者给出的结果不正确,而后者则正确。这是此问题的“最新”示例,已经影响了我大约一年。
这些行的更大上下文是:
WRITE(*,*)"AFTER ENERGY",I1STOR(1),I2STOR(1)
DO 167 NP=1!,NV
IF(I1STOR(NP).NE.0) THEN
INV = I1STOR(NP)
INVV = I2STOR(NP)
WRITE(*,*)"OK9999", INV,INVV,NP,I1STOR(NP),I2STOR(NP)
PAUSE
ENDIF
在上面的第一种情况“ AFTER ENERGY”中,正确写入了I1STOR(1)和I2STOR(1)。如果我在DO 167行之后写出NP的值,这也可以解决这种情况。
我的期望是写出一个变量不会影响它的值。通常,我经常进行大量耗时的计算,最终值偏离了目标,并且在许多情况下,它可以追溯到将值写出(到屏幕或文件中)神奇地缓解了问题的情况。任何帮助将由衷的感谢。