我必须处理一个 fortran 程序,该程序曾经使用 Microsoft Compaq Visual Fortran 6.6 进行编译。我更喜欢使用 gfortran,但我遇到了很多问题。主要问题是生成的二进制文件具有不同的行为。我的程序需要一个输入文件,然后必须生成一个输出文件。但有时,当使用 gfortran 编译的二进制文件时,它会在结束之前崩溃,或者给出不同的数值结果。这是一个由研究人员编写的程序,它使用了大量的浮点数。
所以我的问题是:这两个编译器之间有什么区别可能导致这种问题?
编辑:我的程序计算一些参数的值,并且有很多迭代。一开始,一切都很顺利。经过几次迭代后,会出现一些 NaN 值(仅当由 gfortran 编译时)。
编辑:想想你们每个人的答案。所以我使用了英特尔编译器,它通过提供一些有用的错误消息来帮助我。我的问题的根源是一些变量没有正确初始化。看起来,当使用 compaq visual fortran 编译时,这些变量会自动将 0 作为值,而使用 gfortran(和 intel)时,它会采用随机值,这解释了在以下迭代中加起来的一些数值差异。所以现在的解决方案是更好地理解程序来纠正这些缺失的初始化。