FORTRAN中从``real``到``double precision``的转换是否会受到编译器的影响?

时间:2013-05-21 10:41:38

标签: compiler-construction casting fortran intel-fortran

我有一个FORTRAN代码,我需要在服务器上运行。我注意到两台机器的结果有点不同。在研究过程中,我了解到差异从函数返回real值变为double precision变量。在locale机器上我使用旧编译器(gnu f95 4.1.2),在远程机器上我使用ifort。

2 个答案:

答案 0 :(得分:5)

您应该期望不同编译器编译的同一程序之间存在细微差别。有限精度算术不遵守我们对实数的预期规则。因此,如果编译器改变了操作顺序,结果可能略有不同。

那就是说,gfortran 4.1已经过时了。我不会使用早于4.3的gfortran版本。我强烈建议升级。

答案 1 :(得分:1)

请注意,您的实际值很可能是32位浮点数,而双精度是64位。我怀疑结果的差异是由于两个编译器在传递double precision值时填充real变量中的额外位的不同方式。但是,Fortran real的默认大小取决于编译器,可以通过编译器选项进行设置,因此请检查文档和编译选项。

double precision现已弃用,但需要提供比默认real更高的精度,尽管连续的Fortran标准没有规定要提供多少精度。期望大多数计算机上的大多数编译器默认为double precision的64位是合理的,但您可能不希望在合理的期望下押注抵押贷款。