# COMPUTE Statement

• COMPUTE is a powerful arithmetic statement used to perform all arithmetic operations instead of using dedicated arithmetic statements - ADD, SUBTACT, MULTIPLY, and DIVIDE statements.
• It is flexible because it can handle multiple arithmetic operations in a single 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]``````
Note! All statements coded in [ ] are optional.

Parameters -

• Output-variable - specifies the numeric variable where the computation result will be stored.
• Arithmetic-expression - Specifies a user-defined formulae that performs arithmetic calculation.
• ROUNDED phrase - Used to round the result to the nearest whole number.
• END-COMPUTE - Specifies the end of the COMPUTE statement. It is not required when the COMPUTE ends with a period.

Error Handling -

## Practical Example -

Scenario - Let's assume we have three variables, WS-INP1, WS-INP2, and WS-INP3. We want to perform the expression (WS-INP1 + WS-INP2) * WS-INP3 and store it in WS-OP.

Code -

``````----+----1----+----2----+----3----+----4----+----5----+
...
WORKING-STORAGE SECTION.
01 WS-VAR.
05 WS-INP1     PIC 9(3) VALUE 240.
05 WS-INP2     PIC 9(2) VALUE 10.
05 WS-INP3     PIC 9(2) VALUE 20.
05 WS-OP       PIC 9(5).
...
PROCEDURE DIVISION.

COMPUTE WS-OP = ( WS-INP1 + WS-INP2 ) * WS-INP3
ON SIZE ERROR DISPLAY "SIZE ERROR"
NOT ON SIZE ERROR DISPLAY "RESULT: " WS-OP
END-COMPUTE.
...``````

Output -

`RESULT: 05000`

Explaining example -

In this example:

• If the computation is successful, "RESULT:" will be displayed.
• If the result exceeds the maximum value (or has some other size error) for WS-OP, then "SIZE ERROR" will be displayed.