最近,我遇到了一个奇怪的 FORTRAN95 问题。我初始化变量 X 和 Y 如下:
X=1.0
Y=0.1
后来我将它们加在一起并打印结果:
1.10000000149012
检查变量后,似乎 0.1 没有以双精度表示,完全准确。有没有办法避免这种情况?
最近,我遇到了一个奇怪的 FORTRAN95 问题。我初始化变量 X 和 Y 如下:
X=1.0
Y=0.1
后来我将它们加在一起并打印结果:
1.10000000149012
检查变量后,似乎 0.1 没有以双精度表示,完全准确。有没有办法避免这种情况?
另一种方法是首先使用SELECTED_REAL_KIND内在函数明确指定所需的变量精度,然后使用它来定义和初始化变量。就像是:
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15)
REAL(dp) :: x
x = 1.0_dp
这样做的一个好处是您可以将定义存储dp
在一个模块中,然后USE
在需要的地方存储该模块。现在,如果您想更改程序的精度,您只需更改该位置的定义,而不是在变量初始化结束时dp
搜索和替换所有s。D0
(这也是为什么我不建议按照建议使用1.0D-1
语法来定义 Y 的原因。它可以工作,但会使将来更难找到和更改所有实例。)
Fortran Wiki 上的这个页面提供了一些关于SELECTED_REAL_KIND
.