数値代入文

数値代入文では,変数と式は数値型でなくてはなりません。

式は,変数の範囲要件を満たす値を生成しなくてはなりません。たとえば,32767 よりも大きい値を生成する実数式は,等号の左辺の言語要素が INTEGER(2) 変数である場合には無効です。

およそ -2*10**9 ~ +2*10**9 の範囲の値を正確に表現することができる INTEGER(4) 値が,約 7 けたほどの精度しか持たない REAL(4) に変換されると (複素数定数の実部も含む),有効数字が失われることがあります。

変数が右辺の式と同じデータ型を持っている場合,文はその値を直接に代入します。データ型が異なる場合,式の値は,代入が行われる前に変数のデータ型に変換されます。

次表に,数値代入文のデータ変換規則の要約を示します。REAL(16)COMPLEX(16) は,OpenVMS,Tru64 UNIX,および Linux システムでのみ利用することができます。

数値代入文の変換規則

スカラ・メモリー引用 (V) 式 (E)
整数,論理,または実数 複素数
INTEGER または LOGICAL V=INT(E) V=INT(REAL(E))
E の虚部は使用されません。
REAL
(KIND=4)
V=REAL(E) V=REAL(REAL(E))
E の虚部は使用されません。
REAL
(KIND=8)
V=DBLE(E) V=DBLE(REAL(E))
E の虚部は使用されません。
REAL
(KIND=16)
V=QEXT(E) V=QEXT(REAL(E))
E の虚部は使用されません。
COMPLEX
(KIND=4)
V=CMPLX(REAL(E), 0.0) V=CMPLX(REAL(REAL(E)), REAL(AIMAG(E)))
COMPLEX
(KIND=8)
V=CMPLX(DBLE(E), 0.0) V=CMPLX(DBLE(REAL(E)), DBLE(AIMAG(E)))
COMPLEX
(KIND=16)
V=CMPLX(QEXT(E), 0.0) V=CMPLX(QEXT(REAL(E)), QEXT(AIMAG(E)))

詳細は,INTREALDBLEQEXTCMPLX,および AIMAG を参照してください。

以下に,数値代入文として有効な例と無効な例を示します。

有効
BETA = -1./(2.*X)+A*A/(4.*(X*X))
PI = 3.14159
SUM = SUM + 1.
ARRAY_A = ARRAY_B + ARRAY_C + SCALAR_I ! すべての配列の形状が適合している場合に有効
 
無効 説明
3.14 = A - B 左辺の言語要素は変数でなくてはなりません。
ICOUNT = A//B(3:7) 暗黙のデータ型が一致していません。
SCALAR_I = ARRAY_A(:) 形状が一致していません。