Fortran/データ型
変数とデータの宣言は、すべての Fortran プログラムユニットの先頭で、実行可能な文の前に行わなければなりません。変数には、メモリ上のサイズを指定する kind
があります。kind
のパラメータは、コンパイラやプロセッサによって意味が異なる場合がありますので、ご使用のコンパイラのマニュアルで、どのようなkind
があるかを確認してください。
宣言形式
[編集]変数を宣言するにはいくつかの方法があります。最近のFortranでは、冗長かつ明示的に宣言するのが主流です。次の例では,kind
が8の実数配列を宣言しています(ほとんどのコンパイラでは,これは8バイト長,すなわち倍精度を意味します)。
! モダンな変数宣言 ! <datatype> [(kind=<num>), <attribute>, ... ::] <identifier>[, ...] ! 例: real (kind=8), dimension (3) :: variable
dimension
属性は、タイプアウトするにはかなり長いですが、一行に複数の配列を宣言する場合には、より簡潔になるかもしれません。単一の変数を宣言する場合は、識別子の横に括弧をつけて次元を指定した方が簡潔になるかもしれません。
real (kind=8) :: variable(3)
変数は代入に似た構文で初期化することもできます。
real (kind=8) :: variable(3) = 1.0
::
は、古いバージョンのFortranとの下位互換性のためにオプションです。古いスタイルの宣言では、変数の種類を示すのに*
を使います。
REAL*8 variable(3)
さらに、kind
を完全に省略して、コンパイラーのデフォルトの種類を使用することもできます。
real variable(3)
組込み型
[編集]整数型
[編集]整数型は、符号付き整数値を格納します (すなわち、..., -3, -2, -1, 0, 1, 2, 3, ...)。ほとんどのコンパイラでは、デフォルトのkind
では、整数は4バイトサイズの短整数として格納されます(kind=4
)。長整数は通常8バイトである(kind=8
)。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dimension (dims)、private、value、external、protected、volatile、intenance (inout)です。
integer :: variable
論理型
[編集]論理デ型は、ブーリアン値を格納し、.true.
または.false.
の値のみを格納できます。ほとんどのコンパイラのデフォルトの論理型はkind=4
で、4バイトを占めます。したがって、論理はメモリの点では整数とよく似ていますが、一般的に整数と論理はほとんどの操作で互換性がありません。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dimension(dims)、private、value、external、protected、volatile、intent(inout)です。
logical :: variable
実数型
[編集]実数型は、浮動小数点データを格納します。変数は、科学的な表記法である「仮数」と「指数」としてメモリに格納されます。ほとんどのコンパイラのデフォルトの実数型はkind=4
で、4バイトで構成されています。この場合、24ビットが仮数に、8ビットが指数に使用されます。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dim dimension (dims)、private、value、external、protected、volatile、intenance (inout)です。
すべてのコンパイラは、低精度数と高精度数の少なくとも2種類の実数種類をサポートしています。しかし、規格ではこれらの精度をどのようなサイズにするかは規定されていません。ほとんどのコンパイラは、単精度には32ビット、倍精度には64ビットを使用しています。したがって、多くのコンパイラは、利用可能な高精度を使用するdouble precision
実数データ型をサポートしています。しかし、移植性のためには、selected_real_kind
組込み関数を使用して、変数の精度に必要なkindパラメータを選択する方がはるかに優れています。
real :: variable double precision :: variable2
複素数型
[編集]数学では、複素数は実数部と虚数部を持つ。Fortranでの複素数は、実数のペア(実数部が先で、虚数部が後)として直角座標に格納されます。複素数のデフォルトのkind
は、実数データ型のデフォルトのkind
と常に同じです。つまり、kind=4
の複素数変数は、kind=4
の2つのリアルを含みます。kind=4
のリアルが4バイトに相当する場合、デフォルトの複素数変数のサイズは8バイトになります。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dim dimension(dims)、private、value、external、protected、volatile、intent(inout)です。
complex :: variable
複素数演算
[編集]すべての算術演算子はどちらか一方に複素数を取ることができます。Fortranは複素数の演算や虚数の特殊な規則を自動的に処理します。
エラーを起こす可能性のある関数呼び出しの使用には注意が必要です。例えば、実数-1.0
の平方根を取ると、-1は実数の平方根の領域外であるため、エラーになります。複素数の平方根を取る (-1.0,0.0)
は、-1が複素数平方根のドメイン内にあるので許される。
文字型
[編集]文字型は、文字列を格納します。キャラクタ変数のデフォルトの種類は通常1で、ASCII文字を表します。種類2は通常、ISO 10646規格の文字を表します。文字変数は、文字列の文字数を指定するkind
に加えて、len
パラメータを持つという点でユニークです。通常、1つの文字はメモリ上で1バイトを占めます。これに加えて、文字データ型は配列にすることもできます。
character (len=5,kind=1), dimension (2) :: strings
古いスタイルの宣言では、kind
パラメータはなく、長さパラメータのみです。
CHARACTER*5 strings(2)
定数 (Constants)
[編集]リテラル定数 (Literal constants)
[編集]式の中に埋め込まれたデータは、リテラルまたは定数と呼ばれます。リテラルは、書き方によって特定のデータ型を持つことができます。例えば、以下の行では、値1は整数です。
a = a + 1
以下の表は、リテラル定数の入力方法を示しています。
型 | リテラルの例 |
---|---|
整数型 | 0 , -1 , 9999
|
論理型 | .true. , .false. , T , F
|
実数型 | 1.1 , 0.0005 , -99.9e-99
|
複素数型 | (-1.0,3) , (0.5,-3e5)
|
文字列型 | 'Hello'
|
なお、複素数の括弧表記は、変数には使えません。例えば、(a, b)
は無効です。実数の変数を複素数に変換するには、cmplx
関数を使用する。
cmplx(a, b)
複素数と他の数値を含む表現は、複素数に昇格します。
パラメータ定数 (Parameter constants)
[編集]定数リテラルは単なる無名データ(unnamed data)です。変数も定数になることができます。パラメータ定数は parameter 属性で宣言します。これらの変数は不変であり、宣言後に代入するとエラーになります。また、宣言時には必ず値を指定して初期化しなければなりません。
real, parameter :: PI = 3.1415926536