如何在Fortran中设置双精度值


10

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

X=1.0
Y=0.1

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

1.10000000149012

在检查了变量之后,似乎没有以完全精度的双精度表示0.1。有什么办法可以避免这种情况?

Answers:


21

执行此操作的另一种方法是,首先使用SELECTED_REAL_KIND内部函数在变量中显式指定所需的精度,然后使用它来定义和初始化变量。就像是:

INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15)
REAL(dp) :: x
x = 1.0_dp

这样做的一个好处是可以将的定义存储dp在模块中,然后USE在需要的地方存储该模块。现在,如果您想更改程序的精度,只需dp在该位置更改的定义,而不必D0在变量初始化结束时搜索并替换所有s。(这也是为什么我建议不要按照建议的那样使用1.0D-1语法来定义Y的原因。它可以工作,但将来使查找和更改所有实例变得更加困难。)

Fortran Wiki上的此页面提供了有关的一些很好的附加信息SELECTED_REAL_KIND


没错,这应该是标准方法。
昂德里杰·塞蒂克

人们真的有多少次真的必须盲目地更改其程序的精度,而又不必逐个程序进行测试?使用该_dp方案的主要原因是可以通过便携式方式清楚地定义精度。
2012年

12

您将变量声明为双精度,但使用单精度值对其进行了初始化。

您可能已经写过:

X=1.0d0
Y=1.0d-1

巴伦(Barron)在下面的回答是使字面量达到双精度的另一种方式,其优点是它允许您在以后更改变量的精度。


1
我认为应该使用下面的帖子中描述的1.0_dp方法。
昂德里杰·塞蒂克

1
我第二个@OndřejČertík的评论-Barron的回答是最好的。
OscarB 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.