数値代入文では,変数と式は数値型でなくてはなりません。
式は,変数の範囲要件を満たす値を生成しなくてはなりません。たとえば,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))) |
詳細は,INT,REAL,DBLE,QEXT,CMPLX,および 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(:) | 形状が一致していません。 |