1

我正在尝试阅读用 Fortran 90 编写的代码。在变量声明中,它具有例如:

real(ra) :: X

我无法找出ra这段代码中可以引用的内容。我以为会是这样的东西real(kind=8)有人可以向我解释一下吗?

4

1 回答 1

3

是的

real(ra) :: X

就好像

real(kind=8)

事实上,如果 ra=8 也是一样的!kind= 在这里是可选的。

至于找到它 ra 将是一个参数。它可能与上面的声明在同一个例程中,它可能在例程使用的模块中,或者我想它可能在例程中包含的文件中。可能有不同的选择,但它会以某种方式在范围内。

那么为什么不使用第二种形式呢?这是因为种类数不可移植并且因编译器而异 - 例如

[luser@cromer stackoverflow]$ cat kind.f90 
Program real_kinds

  Implicit None

  Real( 8 ) :: a

End Program real_kinds
[luser@cromer stackoverflow]$ gfortran kind.f90 
[luser@cromer stackoverflow]$ nagfor kind.f90
NAG Fortran Compiler Release 5.3.1 pre-release(904)
Warning: kind.f90, line 7: Unused local variable A
Error: kind.f90, line 5: KIND value (8) does not specify a valid representation method
Errors in declarations, no further processing for REAL_KINDS
[NAG Fortran Compiler error termination, 1 error, 1 warning]

因此,最好使用用 selected_real_kind 内在函数初始化的参数来指定种类:

[luser@cromer stackoverflow]$ cat kind.f90 
Program real_kinds

  Implicit None

  Integer, Parameter :: wp = Selected_real_kind( 12, 70 )

  Real( wp ) :: a

  Write( *, * ) Kind( a )

End Program real_kinds
[luser@cromer stackoverflow]$ gfortran kind.f90
[luser@cromer stackoverflow]$ ./a.out
           8
[luser@cromer stackoverflow]$ nagfor kind.f90
NAG Fortran Compiler Release 5.3.1 pre-release(904)
[NAG Fortran Compiler normal termination]
[luser@cromer stackoverflow]$ ./a.out
 2

可能会做你想做的事。selected_real_kind 的常见替代方法是

Integer, Parameter :: wp = Kind( 1.0d0 )

所以总而言之,它是相同的,只是更好的是如果仔细完成它更便携。

(最后我真的应该说 kind 值与用于存储变量的字节数没有任何关系)

于 2012-11-14T14:11:55.160 回答