我有一个 FORTRAN 代码需要在服务器上运行。我注意到两台机器的结果略有不同。通过研究,我了解到差异是由将
real
值返回到 double precision
变量的函数引起的。在语言环境机器上,我使用旧编译器(gnu f95 4.1.2),在远程机器上,我使用 ifort。
您应该预料到不同编译器编译的同一程序之间会有很小的差异。 有限精度算术不遵守我们期望的实数规则。 因此,如果编译器更改操作顺序,结果可能会略有不同。
也就是说,gfortran 4.1 已经很老了,甚至已经过时了。 我不会使用 4.3 之前的 gfortran 版本。我强烈建议升级。
请注意,您的实际值很可能是 32 位浮点数,而双精度是 64 位。 我怀疑结果的差异是由于两个编译器在传递
double precision
值时填充 real
变量中的额外位的方式不同所致。 但是,Fortran real
的默认大小取决于编译器,可以通过编译器选项设置,因此请检查您的文档和编译选项。
double precision
现已弃用,但需要提供比默认值 real
更高的精度,尽管连续的 Fortran 标准没有说明要提供多少精度。对于 double precision
,大多数计算机上的大多数编译器默认为 64 位是合理的,但您可能不想将抵押贷款押在合理的期望上。