前へ 上へ 次へ
[ precision.f90 ] - 汎用性のある型記述のサンプル
1 実数及び複素数の型記述方法について
1.1 一般的なコードにおいての記述方法
本テキストに示された方法以外にも、良く見られる型の記述方法があります。 それぞれの記述方法について、なぜ推奨されていないのか、理由を述べたいと思います。型 | 推奨 | 記述 | 説明 |
単精度実数 | 〇 | real | 単精度はこの記述方法が推奨されます |
単精度実数 | × | real(4) | 種別番号4の意味がコンパイラによって異なります(4バイトを意味するとは限らない) |
単精度実数 | × | real*4 | Fortran標準に準拠していません |
倍精度実数 | 〇 | double precision | 倍精度はこの記述方法が推奨されます |
倍精度実数 | × | real(8) | 種別番号8の意味がコンパイラによって異なります(8バイトを意味するとは限らない) |
倍精度実数 | × | real*8 | Fortran標準に準拠していません |
単精度複素数 | 〇 | complex | 単精度複素数はこの記述方法が推奨されます |
単精度複素数 | × | complex(4) | コンパイラにより種別番号4の意味が異なります |
単精度複素数 | × | complex*8 | Fortran標準に準拠していません |
倍精度複素数 | 〇 | complex(kind(0d0)) | 倍精度複素数はこの記述方法が推奨されます |
倍精度複素数 | × | complex(8) | 種別番号8の意味がコンパイラによって異なります |
倍精度複素数 | × | complex*16 | Fortran標準に準拠していません |
倍精度複素数 | × | double complex | Fortran標準に準拠していません |
1.2 より本格的なコードにおいての記述方法
より本格的な記述方法としてはselected_real_kind組込み関数を用いて 必要な有効桁数を持つ型のkind番号を取得する方法があります。 例えば以下の例のようなモジュールを利用すると便利です。[ precision.f90 ] - 汎用性のある型記述のサンプル
module my_precision implicit none ! 有効桁数から種別番号を求めるためにselected_real_kindを用いる integer,parameter :: wp = selected_real_kind(p=6) ! p=12等とすると倍精度となる end module my_precision program precision use my_precision implicit none real(wp) x ! wpには指定された有効桁数を持つ型の種別番号が格納されています complex(wp) c ! realとcomplexで種別番号は対応しています x = 0.1_wp ! このようすることで、指定種別の定数表現が可能です c = (0.5_wp, 1.2_wp) print *, x print *, c end program 出力例:(p=6の場合) 0.1000000 (0.5000000,1.2000000) 出力例:(p=12の場合) 0.1000000000000000 (0.5000000000000000,1.2000000000000000)