# Arithmetic Statements

In COBOL, arithmetic operations are performed using specific statements rather than inline operators like some modern programming languages. These statements allow developers to carry out operations like addition, subtraction, multiplication, division, and more complex computations.

The arithmetic statement in COBOL language are -

• SUBTRACT
• MULTIPLY
• DIVIDE
• COMPUTE

The ADD statement is used to perform addition operations. The ADD statement sums two or more numeric values and stores the result in the output variable. If only one value or one variable is used as an input, then it adds to the output variable and places the result into the output variable.

Syntax -

``````---+----2----+----3----+----4----+----5
[......]
TO    input-variableA
GIVING output-variable1 [ROUNDED]
[,.....]
[ON SIZE ERROR Statements-block1]
[NOT ON SIZE ERROR Statements-block2]

Examples -

Scenario1 - Adding number to a variable.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-A      PIC 9(03) VALUE 20.

PROCEDURE DIVISION.
DISPLAY "Result: " WS-A.``````

Output -

`Result: 30`

Scenario2 - Adding two variables to a variable.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-A      PIC 9(03) VALUE 900.
05 WS-B      PIC 9(03) VALUE 200.
05 WS-B      PIC 9(03) VALUE 100.

PROCEDURE DIVISION.
ON SIZE ERROR DISPLAY "OVERFLOW"
NOT ON SIZE ERROR DISPLAY "WS-C:  " WS-C.``````

Output -

`OVERFLOW`

### SUBTRACT Statement -

The SUBTRACT statement is used to perform subtraction operations. Depending on our requirements, it can subtract one or more numeric items from another numeric item, or it can subtract two numeric items and store the result in a third.

Syntax -

``````---+----2----+----3----+----4----+----5
SUBTRACT input-value1|input-variable1
FROM output variable
GIVING output-variable1 [ROUNDED]
[ON SIZE ERROR statements-block1]
[NOT ON SIZE ERROR statements-block2]
[END-SUBTRACT].``````

Example -

Scenario1 - Subtract one variable from other.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-A      PIC 9(03) VALUE 20.
05 WS-B      PIC 9(03) VALUE 30.

PROCEDURE DIVISION.
SUBTRACT WS-A FROM WS-B.
DISPLAY "Result: " WS-B.``````

Output -

`Result: 10`

Scenario2 - Subtract one variable from other and placing result into third.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-A      PIC 9(03) VALUE 200.
05 WS-B      PIC 9(03) VALUE 900.
05 WS-C      PIC 9(03).

PROCEDURE DIVISION.
MULTIPLY WS-A BY WS-B
GIVING WS-C.
DISPLAY "WS-C:  " WS-C.``````

Output -

`WS-C:  700`

### MULTIPLY Statement -

The MULTIPLY statement is used for multiplication operations. It allows multiplying one or more numeric items and storing the result in one or more receiving items.

Syntax -

``````---+----2----+----3----+----4----+----5
MULTIPLY input-value1|input-variable1
BY input-variableA
GIVING output-variable1 [ROUNDED]
[ON SIZE ERROR Statements-block1]
[NOT ON SIZE ERROR Statements-block2]
[END-MULTIPLY].``````

Examples -

Scenario1 - Multiplying two variables.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-A      PIC 9(03) VALUE 20.
05 WS-B      PIC 9(03) VALUE 30.

PROCEDURE DIVISION.
MULTIPLY WS-A BY WS-B.
DISPLAY "Result: " WS-B.``````

Output -

`Result: 600`

Scenario2 - Multiply with error handling.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-A      PIC 9(03) VALUE 90.
05 WS-B      PIC 9(03) VALUE 20.

PROCEDURE DIVISION.
MULTIPLY WS-A BY WS-B
ON SIZE ERROR DISPLAY "OVERFLOW"
NOT ON SIZE ERROR DISPLAY "WS-B:  " WS-B.``````

Output -

`OVERFLOW`

### DIVIDE Statement -

The DIVIDE statement divides one number by another. It's similar to mathematics, where we have a dividend (the number being divided) and a divisor (the number we're dividing by). The DIVIDE statement sets the output values quotient and the remainder to the corresponding variables.

Syntax -

``````DIVIDE ws-variable1
INTO ws-variable2
GIVING ws-result [ROUNDED]
REMAINDER ws-remainder
[ON SIZE ERROR statements-block1]
[NOT ON SIZE ERROR statements-block2]
[END-DIVIDE].``````

Examples -

Scenario1 - Divide one variable with other.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1      PIC 9(03) VALUE 50.
05 WS-VAR2      PIC 9(03) VALUE 5.

PROCEDURE DIVISION.
DIVIDE WS-VAR1 INTO WS-VAR2
DISPLAY "Result: " WS-VAR2.``````

Output -

`Result: 10`

Scenario2 - Divide one variable with other, result and remainder into separate variables.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1      PIC 9(03) VALUE 32.
05 WS-VAR2      PIC 9(03) VALUE 5.
05 WS-VAR3      PIC 9(03) VALUE 0.
05 WS-VAR4      PIC 9(03) VALUE 0.

PROCEDURE DIVISION.
DIVIDE WS-VAR1 INTO WS-VAR2
GIVING WS-VAR3
REMAINDER WS-VAR4
DISPLAY "Result: " WS-VAR3.
DISPLAY "Remainder: " WS-VAR4.``````

Output -

```Result: 6
Remainder: 2```

### COMPUTE Statement -

The COMPUTE is used to perform all arithmetic operations. It is flexible because it can handle multiple arithmetic operations in one expression. The arithmetic operators used in COMPUTE statements are + (ADD), - (SUBTRACT), * (MULTIPLY), / (DIVIDE), and ** (EXPONENT) statements.

Syntax -

``````COMPUTE output-variable [ROUNDED] = arithmetic-expression
[ON SIZE ERROR statements-set1]
[NOT ON SIZE ERROR statements-set2]
[END-COMPUTE]``````

Examples -

Scenario1 - Adding one variable with other.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1      PIC 9(03) VALUE 50.
05 WS-VAR2      PIC 9(03) VALUE 5.
05 WS-VAR3      PIC 9(03).

PROCEDURE DIVISION.
COMPUTE WS-VAR3 = WS-VAR1 + WS-VAR2.
DISPLAY "Result: " WS-VAR2.``````

Output -

`Result: 055`

Scenario2 - Subtract two variables.

`````` WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-VAR1      PIC 9(03) VALUE 32.
05 WS-VAR2      PIC 9(03) VALUE 5.
05 WS-VAR3      PIC 9(03) VALUE 0.

PROCEDURE DIVISION.
COMPUTE WS-VAR3 = WS-VAR1 - WS-VAR2.
DISPLAY "Result: " WS-VAR3.``````

Output -

`Result: 027` • Arithmetic Statement