我有一个需要在服务器上运行的 FORTRAN 代码。我注意到两台机器的结果略有不同。研究它,我了解到差异来自将real
值返回给double precision
变量的函数。在本地机器上我使用旧编译器(gnu f95 4.1.2),在远程机器上我使用 ifort。
问问题
899 次
2 回答
5
您应该期望不同编译器编译的同一程序之间存在微小差异。有限精度算术不遵守我们对实数所期望的规则。因此,如果编译器更改操作顺序,结果可能会略有不同。
也就是说,gfortran 4.1 已经过时了。我不会使用早于 4.3 的 gfortran 版本。我强烈建议升级。
于 2013-05-21T10:53:00.723 回答
1
请注意,您的实际值很可能是 32 位浮点数,而双精度是 64 位。我怀疑结果的差异是由于两个编译器double precision
在传递一个real
值时填充变量中额外位的方式不同。但是,Fortran 的默认大小real
取决于编译器,可以通过编译器选项设置,因此请检查您的文档和编译选项。
double precision
现在已弃用,但需要提供比默认值更高的精度,real
尽管后续的 Fortran 标准没有说明要提供多少精度。期望大多数计算机上的大多数编译器默认为 64 位是合理的double precision
,但您可能不想将抵押押注在合理的期望上。
于 2013-05-21T11:06:57.180 回答