我正在尝试阅读用Fortran 90编写的代码。在变量声明中,它有例如:
real(ra) :: X
我无法找到此代码中ra
可以引用的内容。我以为它会像real(kind=8)
那样有人向我解释这个吗?
答案 0 :(得分:3)
是
real(ra) :: X
就像
real(kind=8)
实际上如果ra = 8就是一样的! kind =在这里是可选的。
至于找到它将是一个参数。它可能与上面的声明处于相同的例程中,它可能位于例程使用的模块中,或者我认为它可能位于例程中包含的文件中。可能有不同的选择,但它会以某种方式在范围内。
那么为什么不使用第二种形式呢?这是因为种类数不可移植,并且因编译器而异 - 例如
[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
可能会做你想要的。 <_p>是selected_real_kind的常见替代方法
Integer, Parameter :: wp = Kind( 1.0d0 )
总而言之,它是相同的,更好的是,如果仔细地做,它更便携。
(最后我真的应该说,有些值与用于存储变量的字节数无关)