2007年8月21日火曜日

fortranにおける型宣言文

フォートランの型宣言文はf77とf90で形が違う。しかも単精度、倍精度、倍倍精度が用意されている。結構混乱するのでまとめ。私はなんちゅーかf77とf90とf95を混用してるので、一度整理しとかんと思わぬ事故が発生しそう。

f77での変数の型

整数型
integer(デフォルト、4バイト)
integer*8(オプション、8バイト)

実数型
real(単精度実数)
real*8= double precision(倍精度実数)
real*16(4倍精度実数)

複素数型
complex*8=complex (単精度複素数
complex*16 (倍精度複素数)
complex*32 (4倍精度複素数)

なので、倍精度複素数にたいする組み込み関数 dimag()(虚部を返す組み込み関数)とかdble()(実数化する組み込み関数)はcomplex*16で宣言される変数に使わないとコンパイル時にviolationがどうこうとかいうエラーメッセージがでます。
変数の型には他にlogical,characterなんかがあるけど数値計算にはあんまり使わないし、使ってもデフォルトの型で大抵事足りるので省略。詳しくはhttp://www.hiroshima-cu.ac.jp/japanese/IPC/hunet99/sun/WorkShop/ja/html_docs/fortran/f77rm/data.doc.html#2253
基本的にf77での型宣言文は
型宣言子(*n)=変数名のリスト であるもよう。
定数化するには型宣言文の次以降の行で
parameter (変数名=定数)てな感じで。


f90
f90だと定数化も配列宣言も実にシンプルにできる。
型宣言子[(長さ,種別指定)], 属性指定 :: 変数名のリスト
長さ,種別指定のとこに8とか16とか代入する。これで精度を決定。
属性指定にはsaveとかparameterとか。intent(in)とか使うと引数の入出力特性も制御できたり。このへんf90は便利かもしれない。


REAL, PARAMETER :: pi = 3.141593

0 コメント: