Compiler construction 在FORTRAN中从“real”到“double precision”的转换是否应该受到编译器的影响?

Compiler construction 在FORTRAN中从“real”到“double precision”的转换是否应该受到编译器的影响?,compiler-construction,casting,fortran,intel-fortran,Compiler Construction,Casting,Fortran,Intel Fortran,我有一个需要在服务器上运行的FORTRAN代码。我注意到两台机器的结果有点不同。通过研究,我了解到差异是从返回实数值的函数上升到双精度变量的函数。在本地计算机上,我使用旧编译器(gnu f95 4.1.2),在远程计算机上,我使用ifort 对于由不同编译器编译的同一程序,您应该期望它们之间的差异很小。有限精度算法不遵守我们期望的实数规则。因此,如果编译器更改操作顺序,结果可能会略有不同 这就是说,gfortran 4.1非常陈旧,已经过时。我不会使用早于4.3的gfortran版本。我强烈建议

我有一个需要在服务器上运行的FORTRAN代码。我注意到两台机器的结果有点不同。通过研究,我了解到差异是从返回
实数
值的函数上升到
双精度
变量的函数。在本地计算机上,我使用旧编译器(gnu f95 4.1.2),在远程计算机上,我使用ifort

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


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

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


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

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


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

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


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

谢谢。简而言之,我无法升级它。我得到的数字(例如)是-8.442167043685913E-003,而不是-8.442166328430176E-003。这种差异是否如您所描述的那样小?如果在分配给双精度变量之前,以单精度进行计算,那么这种差异是合理的。它只在小数点后第6位上有所不同,这是单精度的所有要求。如果以双精度完成,它比典型的更大,但仍然可能,这取决于…谢谢。简而言之,我无法升级它。我得到的数字(例如)是-8.442167043685913E-003,而不是-8.442166328430176E-003。这种差异是否如您所描述的那样小?如果在分配给双精度变量之前,以单精度进行计算,那么这种差异是合理的。它只在小数点后第6位上有所不同,这是单精度的所有要求。如果以双精度完成,它比典型的要大,但仍然有可能,这取决于…现在不推荐使用双精度?我应该用什么来代替呢?我倾向于用那种。这些天内在模块
iso\u fortran\u env
中定义的参数(例如
real64
int32
)。如果您的编译器尚未提供此功能,请查看函数
selected\u real\u kind
及其使用方法。现在不推荐使用双精度?我应该用什么来代替呢?我倾向于用那种。这些天内在模块
iso\u fortran\u env
中定义的参数(例如
real64
int32
)。如果您的编译器尚未提供此功能,请查看函数
selected\u real\u kind
及其使用方法。