算術ステートメントの各オペランドのデータ記述は、同じである必要はありません。 計算の途中で、コンパイラーが必要なデータ変換や小数点の位置合わせをします。
ARITH(COMPAT) コンパイラー・オプションが有効な場合は、各オペランドの最大サイズは 10 進数の 18 桁です。ARITH(EXTEND) コンパイラー・オプションが有効な場合は、 各オペランドの最大サイズは 10 進数の 31 桁です。
オペランドの合成 は、複数のオペランドを小数点の位置で合わせ、それらを互いに重ね合わせた結果生成される仮想データ項目のことです。
ARITH(COMPAT) コンパイラー・オプションが有効な場合、オペランドの合成のサイズは、最大 30 桁となります。 ARITH(EXTEND) コンパイラー・オプションが有効な場合、オペランドの合成のサイズは、最大 31 桁となります。
次の表は、 各算術ステートメントにおいてオペランドの合成がどのようにして決められるかを示します。
| ステートメント | オペランド合成の決め方 |
|---|---|
| SUBTRACT
ADD |
GIVING という語の後のオペランドを除き、所定のステートメント内のすべてのオペランドを重ね合わせる |
| MULTIPLY | 受け取りデータ項目をすべてを重ね合わせる |
| DIVIDE | REMAINDER データ項目を除き、受け取りデータ項目をすべて重ね合わせる |
| COMPUTE | 制約事項は適用されない |
例えば、各項目がデータ部で次のように定義されているとします。
A PICTURE 9(7)V9(5). B PICTURE 9(11)V99. C PICTURE 9(12)V9(3).
次のようなステートメントが実行されると、オペランドの合成は、 17 桁の 10 進数になります。
ADD A B TO C
これは次のような暗黙の記述を持ちます。
COMPOSITE-OF-OPERANDS PICTURE 9(12)V9(5).
ADD ステートメントおよび SUBTRACT ステートメントでは、 オペランドの合成が 30 桁以下 (ARITH(COMPAT) コンパイラー・オプションを指定した場合)、 または 31 桁以下 (ARITH(EXTEND) コンパイラー・オプションを指定した場合) であれば、 実行時に有効数字が切り落とされないように、コンパイラーで十分なスペースが確保されます。
算術ステートメントにおいて、希望どおりの精度を最終的な結果で得るには、 十分な桁数と小数点位置を持つデータを定義することが重要です。 詳細については、「COBOL for Windows プログラミング・ガイド」の中間結果に関するセクションを参照してください。
算術ステートメント内のオペランドがストレージの一部を共用している場合 (つまり、オペランドがオーバーラップしているとき)、 そのようなステートメントを実行した結果は予測できません。
1 つの算術ステートメントが複数の演算結果を持つとき、実行は概念的には次のようにして行われます。
例えば、次のステートメントを実行するとします。
ADD A, B, C, TO C, D(C), E.
これは、以下の一連のステートメントの実行と同じことです。
ADD A, B, C GIVING TEMP. ADD TEMP TO C. ADD TEMP TO D(C). ADD TEMP TO E.
上記の例で TEMP とは、コンパイラーの提供する一時的な結果フィールドです。 D (C) に対して加算演算が行われると、添え字 C には、 C の新しい値が入ります。