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

问题描述 投票:0回答:2

我有一个 FORTRAN 代码需要在服务器上运行。我注意到两台机器的结果略有不同。通过研究,我了解到差异是由将

real
值返回到
double precision
变量的函数引起的。在语言环境机器上,我使用旧编译器(gnu f95 4.1.2),在远程机器上,我使用 ifort。

casting fortran intel-fortran
2个回答
5
投票

您应该预料到不同编译器编译的同一程序之间会有很小的差异。 有限精度算术不遵守我们期望的实数规则。 因此,如果编译器更改操作顺序,结果可能会略有不同。

也就是说,gfortran 4.1 已经很老了,甚至已经过时了。 我不会使用 4.3 之前的 gfortran 版本。我强烈建议升级。


1
投票

请注意,您的实际值很可能是 32 位浮点数,而双精度是 64 位。 我怀疑结果的差异是由于两个编译器在传递

double precision
值时填充
real
变量中的额外位的方式不同所致。 但是,Fortran
real
的默认大小取决于编译器,可以通过编译器选项设置,因此请检查您的文档和编译选项。

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

© www.soinside.com 2019 - 2024. All rights reserved.