数値式中のすべての演算対象が同じデータ型ならば,結果もやはりその型となります。
式中に異なるデータ型の演算対象が混在している場合,その式の評価と,結果として得られる値のデータ型は,各データ型に関連付けられた順位に依存します。次の表に,各データ型に関連付けられた順位を示します。
データ型 | 順位 | LOGICAL(1) および BYTE | 最低 | LOGICAL(2) | . | LOGICAL(4) | . | LOGICAL(8) | . | INTEGER(1) | . | INTEGER(2) | . | INTEGER(4) | . | INTEGER(8) | . | REAL(4) | . | REAL(8) 1 | . | REAL(16) 2 | . | COMPLEX(4) | . | COMPLEX(8) 3 | . | COMPLEX(16) 2 | 最高 |
1 DOUBLE PRECISION2 VMS と U*X 3 DOUBLE COMPLEX |
異なるデータ型の 2 つの数値演算対象に対する演算によって生成された値のデータ型は,演算に含まれる最も順位の高い演算対象のデータ型となります。たとえば,整数型と実数型の演算対象に対する演算から得られる値は実数型です。ただし,COMPLEX(4) または COMPLEX(8) データ型と,DOUBLE PRECISION データ型が含まれる演算は,COMPLEX(8) の結果を生成します。
式のデータ型は,その式の最終演算結果のデータ型であり,以下の規則に従って決定されます。
整数型演算は整数型演算対象に対してのみ実行されます (数値の文脈で使用される論理要素は整数型として扱われます)。整数型算術では,除算の結果として生じる小数部は,丸められるのではなく切り捨てられます。たとえば,1/4 + 1/4 + 1/4 + 1/4 の結果は 1 ではなく 0 です。
実数型演算は,実数型演算対象か,実数型,整数型,および論理型演算対象の組み合わせに対してのみ実行されます。整数型演算対象は,それぞれに 0 に等しい小数部を与えることで実数型に変換されます。その後,式は実数型算術を使って評価されます。ただし,Y = (I/J)*X という式では,I と J に対して整数型除算演算が実行され,その結果と X に対して実数型乗算が実行されます。
いずれかの演算対象が高精度の実数型 (REAL(8) または REAL(16)) である場合,式が評価される前に,他のすべての演算対象が高精度の実数型に変換されます。
単精度実数型演算対象が倍精度実数型演算対象に変換されるときには,下位の 2 進けたがゼロに設定されます。この変換によって精度が高まるわけではありません。つまり,小数の変換によって,小数部にゼロが追加されるわけではありません。たとえば,0.3333333 という値を持つ実数型変数は,おおよそ 0.3333333134651184D0 に変換されます。0.3333333000000000D0 や 0.3333333333333333D0 に変換されるのではありません。
複素数型演算対象を含んでいる演算では,整数型演算対象は前に述べたように実数型に変換されます。結果として得られる単精度または倍精度実数型演算対象は,複素数の実部として扱われ,虚部には値 0 が割り当てられます。その後,式は複素数型算術を使って評価され,結果として得られる値は複素数型となります。COMPLEX(4) または COMPLEX(8) 演算対象と,DOUBLE PRECISION 演算対象が含まれる演算は,COMPLEX(8) 演算として実行されます。DOUBLE PRECISION 演算対象は丸められません。
これらの規則は,一般に,片方の演算対象が定数である数値演算にも適用されます。ただし,実数または複素数の定数が高精度の式で使用されている場合,定数の高い精度は保たれます。これは,定数の DOUBLE PRECISION (REAL(8)) または REAL(16) (VMS と U*X) 表現が与えられたかのような結果になります。たとえば,1.0D0 + 0.3333333 という式は,1.0D0 + 0.3333333000000000D0 のように扱われます。