5.2.2 算術文

算術文には,COMPUTE文,ADD文,SUBTRACT文,MULTIPLY文,およびDIVIDE文があります。各文の説明を,次に示します。

なお,例中のtemp,quot,rem-tmp,およびremは,任意の一時的な記憶場所を示します。

<この項の構成>
(1) COMPUTE文
(2) ADD文
(3) SUBTRACT文
(4) MULTIPLY文
(5) DIVIDE文

(1) COMPUTE文

COMPUTE文は,算術式の値を一つ以上のデータ項目に収めます。

COMPUTE文による演算の例を次に示します。なお,A~Dは整数項目を表します。

(例)

COMPUTE A = B +  C.    ←BにCを加算し,その結果をAに収める
COMPUTE A = B -  C.    ←BからCを減算し,その結果をAに収める
COMPUTE A = B *  C.    ←BにCを乗算し,その結果をAに収める
COMPUTE A = B /  C.   ←BをCで除算し,その結果をAに収める
COMPUTE A = B ** C.    ←BをC乗し,その結果をAに収める

注※
剰余を求めたい場合には,次のようなCOMPUTE文を組み合わせます。

COMPUTE A =  B / C          ←BをCで除算し,その商をAに収める
COMPUTE D =  B - C * A      ←商Aを使って剰余を求め,Dに収める

(2) ADD文

ADD文は,幾つかの数字作用対象の和を一つ以上のデータ項目に収めます。

ADD文による演算の例を次に示します。

(例1)
ADD文は,続く注記行のCOMPUTE文と同じです。

      ADD A TO B
     *COMPUTE B = A + B
      ADD A B C TO D
     *COMPUTE D = A + B + C + D
      ADD A B TO C D
     *COMPUTE temp = A + B
     *COMPUTE C = temp + C
     *COMPUTE D = temp + D

(例2)
ADD文は,続く注記行のCOMPUTE文と同じです。

      ADD A B TO C GIVING D
     *COMPUTE D = A + B + C
      ADD A B GIVING C D ROUNDED
     *COMPUTE temp = A + B
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp

(例3)
ADD文は,続く注記行の二つのCOMPUTE文を合わせたものと同じです。

      05 A.
        10 D1 PIC S9(6).
        10 D2 PIC S9(3)V9(2) USAGE COMP.
      05 B.
        10 D1 PIC S9(5)V9 USAGE COMP.
        10 D2 PIC 9(5)V9(5).
        :
          ADD CORRESPONDING A TO B ROUNDED
     *    COMPUTE D1 OF B = D1 OF A + D1 OF B
     *    COMPUTE D2 OF B = D2 OF A + D2 OF B

(3) SUBTRACT文

SUBTRACT文は,幾つかの数字作用対象の和を,一つ以上のデータ項目から減じ,その結果を一つ以上のデータ項目に収めます。

SUBTRACT文による演算の例を次に示します。

(例1)
SUBTRACT文は,続く注記行のCOMPUTE文と同じです。

      SUBTRACT A FROM B
     *COMPUTE B = B - A
      SUBTRACT A B C FROM D
     *COMPUTE D = D - (A + B + C)
      SUBTRACT A B FROM C D
     *COMPUTE temp = A + B
     *COMPUTE C = C - temp
     *COMPUTE D = D - temp

(例2)
SUBTRACT文は,続く注記行のCOMPUTE文と同じです。

      SUBTRACT A FROM B GIVING C
     *COMPUTE C = B - A
      SUBTRACT A B C FROM D GIVING E
     *COMPUTE E = D - (A + B + C)
      SUBTRACT A B FROM C GIVING D E ROUNDED
     *COMPUTE temp = C - (A + B)
     *COMPUTE D = temp
     *COMPUTE E ROUNDED = temp

(例3)
SUBTRACT文は,続く注記行の二つのCOMPUTE文を合わせたものと同じです。

      05 A.
       10 D1 PIC S9(6).
       10 D2 PIC S9(3)V9(2) USAGE COMP.
      05 B.
       10 D1 PIC S9(5)V9 USAGE COMP.
       10 D2 PIC 9(5)V9(5).
             :
          SUBTRACT CORRESPONDING A FROM B
     *COMPUTE D1 OF B = D1 OF B - D1 OF A
     *COMPUTE D2 OF B = D2 OF B - D2 OF A

(4) MULTIPLY文

MULTIPLY文は,数字作用対象同士の積を計算し,その結果を一つ以上のデータ項目に収めます。

MULTIPLY文による演算の例を次に示します。

(例1)
MULTIPLY文は,続く四つのCOMPUTE文を合わせたものと同じです。

      MULTIPLY A BY B ROUNDED C D
     *COMPUTE temp = A
     *COMPUTE B ROUNDED = temp * B
     *COMPUTE C = temp * C
     *COMPUTE D = temp * D

(例2)
MULTIPLY文は,続く四つのCOMPUTE文を合わせたものと同じです。

      MULTIPLY A BY B GIVING C D ROUNDED E
     *COMPUTE temp = A * B
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp
     *COMPUTE E = temp

(5) DIVIDE文

DIVIDE文は,一つの作用対象をほかの数字作用対象で割り,その商と剰余を一つ以上のデータ項目に収めます。

DIVIDE文による演算の例を次に示します。

(例1)
DIVIDE文は,続く注記行のCOMPUTE文の組と同じです。

      DIVIDE A INTO B ROUNDED A C
     *COMPUTE temp = A
     *COMPUTE B ROUNDED = B / temp
     *COMPUTE A = A / temp
     *COMPUTE C = C / temp

(例2)
DIVIDE文は,続く注記行のCOMPUTE文と同じです。

      DIVIDE A INTO B GIVING C D ROUNDED
     *COMPUTE temp = B / A
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp

(例3)
DIVIDE文は,続く注記行のCOMPUTE文と同じです。

      DIVIDE A BY B GIVING C D ROUNDED
     *COMPUTE temp = A / B
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp

(例4)
DIVIDE文は,続く注記行のCOMPUTE文の組と同じです。

      DIVIDE A INTO B GIVING C ROUNDED REMAINDER D
     *COMPUTE quot = B / A
     *COMPUTE rem-tmp = quot.
     *COMPUTE rem = B - A * rem-tmp.
     *COMPUTE C ROUNDED = quot
     *COMPUTE D = rem

(例5)
DIVIDE文は,続く注記行のCOMPUTE文と同じです。

      DIVIDE A BY B GIVING C ROUNDED REMAINDER D
     *COMPUTE quot = A / B
     *COMPUTE rem = A - B * quot
     *COMPUTE C ROUNDED = quot
     *COMPUTE D = rem