在Fortran中从53位切换到64位FPU

时间:2009-10-09 06:31:49

标签: fortran

我正在将Fortran PowerStation(版本4.0)中的Fortran代码移植到Fortran 11(2003)编译器中。旧编译器(PowerStation)具有53位精度。移植到新编译器时,我没有为我的real / float变量实现正确或精确的值。我希望新的编译器是64位精度。所以我认为我需要将FPU(浮点单元)从53位更改为64位精度。它是否正确?如果是这样,我如何使用新编译器的属性将53位更改为64位精度?如果没有,我该怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:2)

在Fortran 90/95/2003中请求浮点精度的可移植方法是使用selected_real_kind内在函数。例如, integer, parameter :: DoubleReal_K = selected_real_kind (14)将定义一个整数DoubleReal_K,它指定一个至少包含14位小数的浮点变量: real (DoubleReal_K) :: MyFloat。 请求14位十进制数通常会产生一个53位的双精度浮点数 - 但唯一的保证是14位十进制数。

如果需要更高的精度,请使用大于14的值来指定更长的类型 - 17个十进制数字可能会获得扩展精度(64位),或者它可能会获得四极精度,或者什么也不会,具体取决于编译器。如果编译器有更大的类型可用,它将提供它...否则,获得更好的编译器。你为什么要使用这样一个旧的不受支持的编译器?此外,不要指望浮点计算的精确结果 - 更改导致结果发生微小变化是正常的。

答案 1 :(得分:1)

您希望新编译器是64位精度吗?我希望您阅读本手册并自己解决,但如果您不能这样做,请告诉我们您使用的是哪种编译器,有人可能会提供帮助。

旧代码和使用新编译器编译的代码的结果有何不同?当然,如果精度发生变化,结果将不会完全相同 - 除非你采取特殊步骤以确保相同,否则它们将会如何。