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