我正在尝试阅读用 Fortran 90 编写的代码。在变量声明中,它具有例如:
real(ra) :: X
我无法找出ra
这段代码中可以引用的内容。我以为会是这样的东西real(kind=8)
有人可以向我解释一下吗?
我正在尝试阅读用 Fortran 90 编写的代码。在变量声明中,它具有例如:
real(ra) :: X
我无法找出ra
这段代码中可以引用的内容。我以为会是这样的东西real(kind=8)
有人可以向我解释一下吗?
是的
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 值与用于存储变量的字节数没有任何关系)