我正在将Fortran代码从Fortran PowerStation(4.0版)移植到Fortran 11(2003)编译器。旧的编译器(PowerStation)具有53位精度。当移植到新的编译器时,我没有为我的实型/浮点型变量获得正确或精确的值。我希望新的编译器是64位精度的。所以我认为我需要将FPU (浮点单元)从53位精度更改为64位精度。这是正确的吗?如果是这样,我如何使用新编译器的属性将53位精度更改为64位精度?如果没有,我应该怎么做?
提前谢谢。
发布于 2009-10-11 15:54:13
在Fortran90/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位),也可能会得到四极精度,或者什么也不会得到,具体取决于编译器。如果编译器有更大的类型可用,它将提供它...否则,请使用更好的编译器。为什么你要用这么旧的、不受支持的编译器呢?此外,不要期望从浮点计算中得到准确的结果--更改导致结果发生微小变化是正常的。
发布于 2009-10-09 16:01:17
您希望新的编译器是64位精度的吗?我希望您阅读手册并自己弄清楚,但是如果您不能做到这一点,请告诉我们您使用的是哪个编译器,有人可能会帮助您。
旧代码和使用新编译器编译的代码的结果有什么不同?当然,如果精度改变了,结果就不会完全一样--除非你采取特殊措施来确保一致性,否则结果怎么可能是一样的。
https://stackoverflow.com/questions/1542124
复制相似问题