1

私はFortran90で書かれたコードを読み込もうとしています。変数宣言には、たとえば次のようなものがあります。

real(ra) :: X

raこのコードで何を参照できるかを見つけることができませんでした。real(kind=8)誰かが私にこれを説明してもらえますか?

4

1 に答える 1

3

はい

real(ra) :: X

のようなものです

real(kind=8)

実際、ra = 8の場合も同じです!ここでは、kind=はオプションです。

それを見つけることに関しては、raがパラメータになります。上記の宣言と同じルーチンにあるか、ルーチンで使用されるモジュールにあるか、ルーチンに含まれているファイルにあると思います。さまざまなオプションがあるかもしれませんが、それはどういうわけか範囲内になります。

では、2番目の形式を使用してみませんか?これは、種類番号が移植可能ではなく、コンパイラごとに異なるためです。

[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 )

要約すると、それは同じですが、注意深く行うと、よりポータブルになるという点で優れています。

(そして最後に、親切な値は変数を格納するために使用されるバイト数とはまったく関係がない必要があると本当に言うべきです)

于 2012-11-14T14:11:55.160 に答える