2013年に大きな作業コードを倍精度から4倍精度に変換する問題がありました。 "Converting a working code from double-precision to quadruple-precision: How to read quadruple-precision numbers in FORTRAN from an input file"です。合意は、「作業精度」を指定する可変パラメータ「WP」を使用して変数を宣言することでした。 D + 01を使用して宣言された変数とQ + 01を使用する別のバージョンのプログラムの別のバージョン。こうすることで、WP = real128またはWP = real64を一番上に定義することで簡単に前後に切り替えることができ、残りの部分を変更する必要はありません。数値の精度を調整可能なパラメータにする方法を教えてください。
しかし、どうすればいいですか?
私は、簡単なコードTEST.F90を作ることによって、その質問への答えで提案を試してみました:
PROGRAM TEST
use ISO_FORTRAN_ENV
WP= real128
IMPLICIT NONE
real (WP) :: X
X= 5.4857990945E-4_WP
END PROGRAM TEST
はしてコンパイル:
~/gcc-4.6/bin/gfortran -o tst.x TEST.F90
しかし、それは与える:
IMPLICIT NONE
1
Error: Unexpected IMPLICIT NONE statement at (1)
QLEVEL16.F90:5.12:
real (WP) :: MEL
1
Error: Parameter 'wp' at (1) has not been declared or is a variable, which does not reduce to a constant expression
QLEVEL16.F90:6.29:
MEL= 5.4857990945E-4_WP
1
Error: Missing kind-parameter at (1)
優秀!他のスレッドの答えは、WP = real128がISO_FORTRAN_ENVを使用した直後で、「整数、パラメータ::」の部分を表示していないように見えるようにしました。それが私の問題の原因でした。ありがとうございました! – user1271772
'use、intrinsic :: iso_fortran_env、wp => real128'を使うのはおそらくもっと魅力的でしょうか? – francescalus
ありがとう@francescalus。 2つの選択肢のメリットとデメリットは何ですか? – user1271772