如何在 Fortran 中设置双精度值

计算科学 正则 浮点
2021-12-15 03:11:19

最近,我遇到了一个奇怪的 FORTRAN95 问题。我初始化变量 X 和 Y 如下:

X=1.0
Y=0.1

后来我将它们加在一起并打印结果:

1.10000000149012

检查变量后,似乎 0.1 没有以双精度表示,完全准确。有没有办法避免这种情况?

2个回答

另一种方法是首先使用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.

您将变量声明为双精度,但您使用单精度值初始化它们。

你可以写:

X=1.0d0
Y=1.0d-1

下面巴伦的回答是另一种实现字面双精度的方法,其优点是它允许您在以后更改变量的精度。