【发布时间】:2011-03-19 00:58:14
【问题描述】:
我正在将应用程序从 fortran 旧版本 (4.0) 移植到新版本 (11.0)。在移植时,我遇到了一些 real*4 变量的问题:
real*4 a,b,c
a=0.9876875
b=0.6754345
c=a*b
旧编译器0.667118 中c 的值,这是正确的值。但是使用新的编译器,我从输出(c 变量)中得到了一个小的变化,比如0.667120。虽然这是一个很小的变化,但我在其他一些计算中使用了这些值。所以整体输出有很大的不同。如何克服这个问题?
【问题讨论】:
-
你使用的是什么 Fortran 编译器?
-
重申 Pillsy 的问题。 AFAIK Fortran 4 是 Fortran 66 之前的语言名称。我能找到的关于“Fotran 11”的最佳参考是来自 Abisoft 和 Intel 的特定编译器版本。你需要更具体。
-
嗯。此外,CPU 是否与 x86 兼容(Intel/AMD PC)?这对浮点数产生了影响。
-
@T.E.D - 我想你的意思是 Absoft Pro Fortran,而不是 Abisoft。至于cvnravi,我认为他指的不是旧的fortran IV(很少写成“fortran 4”),而是编译器。
-
如果你很在意精度,你可能应该使用
real*8而不是real*4。使用 PGI Fortran 和 GNU Fortran,我还使用了非 IEEE 兼容模式(GNU 称之为-ffast-math,我忘记了 PGI 是如何称呼它的)将中间结果保存在 FPU 寄存器中,而不是将它们取出并四舍五入每个操作都解决了我遇到的一些问题。
标签: fortran