MainframeMaster

COBOL Tutorial

COBOL MULTIPLY and END-MULTIPLY

The MULTIPLY and END-MULTIPLY statements represent sophisticated arithmetic processing capabilities within COBOL programming environments, providing comprehensive multiplication operations, advanced error handling mechanisms, and intelligent numeric computation features that enable reliable mathematical calculations, efficient arithmetic processing, and robust exception management. These statements embody enterprise arithmetic principles by supporting flexible multiplication patterns, enabling precise numeric control, and facilitating comprehensive calculation requirements while maintaining computational accuracy, ensuring consistent arithmetic behavior, and enabling scalable mathematical processing across business applications requiring reliable multiplication operations, automated error detection, and predictable arithmetic results throughout complex financial and statistical computations.

MULTIPLY Syntax and Forms

MULTIPLY Statement Formats
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
*> Format 1: MULTIPLY...GIVING MULTIPLY identifier-1 BY identifier-2 GIVING identifier-3 [ROUNDED] [ON SIZE ERROR imperative-statement] [NOT ON SIZE ERROR imperative-statement] [END-MULTIPLY]. *> Format 2: MULTIPLY...BY (in-place) MULTIPLY identifier-1 BY identifier-2 [ROUNDED] [ON SIZE ERROR imperative-statement] [NOT ON SIZE ERROR imperative-statement] [END-MULTIPLY]. *> Examples: *> Simple multiplication with GIVING MULTIPLY QUANTITY BY UNIT-PRICE GIVING TOTAL-COST. *> In-place multiplication MULTIPLY SALARY BY 1.05 END-MULTIPLY. *> With rounding and error handling MULTIPLY HOURS-WORKED BY HOURLY-RATE GIVING GROSS-PAY ROUNDED ON SIZE ERROR DISPLAY "Payroll calculation overflow" MOVE 999999.99 TO GROSS-PAY NOT ON SIZE ERROR DISPLAY "Payroll calculated: $" GROSS-PAY END-MULTIPLY. *> Multiple target fields MULTIPLY TAX-RATE BY INCOME GIVING FEDERAL-TAX ROUNDED STATE-TAX ROUNDED ON SIZE ERROR PERFORM HANDLE-TAX-OVERFLOW END-MULTIPLY.
Arithmetic
Multiplication
Error Handling

Comprehensive MULTIPLY Examples

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
IDENTIFICATION DIVISION. PROGRAM-ID. MULTIPLY-OPERATIONS-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Basic multiplication operands 01 WS-ARITHMETIC-FIELDS. 05 WS-MULTIPLICAND PIC 9(6)V99 VALUE 1234.56. 05 WS-MULTIPLIER PIC 9(4)V99 VALUE 7.25. 05 WS-PRODUCT PIC 9(8)V99. 05 WS-ROUNDED-PRODUCT PIC 9(8)V99. *> Business calculation fields 01 WS-PAYROLL-CALC. 05 WS-HOURS-WORKED PIC 9(3)V9 VALUE 40.5. 05 WS-HOURLY-RATE PIC 9(3)V99 VALUE 25.75. 05 WS-GROSS-PAY PIC 9(6)V99. 05 WS-OVERTIME-RATE PIC 9V99 VALUE 1.5. 05 WS-OVERTIME-PAY PIC 9(6)V99. *> Financial calculations 01 WS-FINANCIAL-FIELDS. 05 WS-PRINCIPAL PIC 9(8)V99 VALUE 50000.00. 05 WS-INTEREST-RATE PIC 9V9999 VALUE 0.0525. 05 WS-YEARS PIC 9(2) VALUE 5. 05 WS-ANNUAL-INTEREST PIC 9(8)V99. 05 WS-COMPOUND-FACTOR PIC 9V9999. *> Sales commission calculations 01 WS-SALES-COMMISSION. 05 WS-SALES-AMOUNT PIC 9(8)V99 VALUE 125000.00. 05 WS-COMMISSION-RATE PIC 9V9999 VALUE 0.0350. 05 WS-BASE-COMMISSION PIC 9(6)V99. 05 WS-BONUS-MULTIPLIER PIC 9V99 VALUE 1.25. 05 WS-TOTAL-COMMISSION PIC 9(6)V99. *> Inventory calculations 01 WS-INVENTORY-CALC. 05 WS-QUANTITY PIC 9(6) VALUE 500. 05 WS-UNIT-COST PIC 9(4)V99 VALUE 12.75. 05 WS-TOTAL-COST PIC 9(8)V99. 05 WS-MARKUP-PERCENTAGE PIC 9V99 VALUE 1.40. 05 WS-SELLING-PRICE PIC 9(6)V99. *> Error handling and status 01 WS-CALCULATION-STATUS. 05 WS-ERROR-FLAG PIC X VALUE 'N'. 05 WS-OPERATIONS-COUNT PIC 9(4) VALUE 0. 05 WS-SUCCESS-COUNT PIC 9(4) VALUE 0. 05 WS-ERROR-COUNT PIC 9(4) VALUE 0. *> Arrays for batch calculations 01 WS-BATCH-CALCULATIONS. 05 WS-PRICE-TABLE OCCURS 10 TIMES. 10 WS-ITEM-PRICE PIC 9(4)V99. 10 WS-QUANTITY-SOLD PIC 9(4). 10 WS-LINE-TOTAL PIC 9(6)V99. 05 WS-GRAND-TOTAL PIC 9(8)V99. PROCEDURE DIVISION. MAIN-MULTIPLY-DEMO. DISPLAY "=== COBOL MULTIPLY OPERATIONS DEMONSTRATION ===" DISPLAY SPACES PERFORM DEMONSTRATE-BASIC-MULTIPLY PERFORM DEMONSTRATE-PAYROLL-CALCULATIONS PERFORM DEMONSTRATE-FINANCIAL-CALCULATIONS PERFORM DEMONSTRATE-COMMISSION-CALCULATIONS PERFORM DEMONSTRATE-BATCH-MULTIPLY PERFORM DEMONSTRATE-ERROR-HANDLING PERFORM DISPLAY-CALCULATION-SUMMARY DISPLAY "=== MULTIPLY DEMO COMPLETE ===" STOP RUN. DEMONSTRATE-BASIC-MULTIPLY. DISPLAY "=== BASIC MULTIPLY OPERATIONS ===" DISPLAY SPACES DISPLAY "Basic multiplication examples:" *> Simple MULTIPLY...GIVING MULTIPLY WS-MULTIPLICAND BY WS-MULTIPLIER GIVING WS-PRODUCT ADD 1 TO WS-OPERATIONS-COUNT ADD 1 TO WS-SUCCESS-COUNT DISPLAY " " WS-MULTIPLICAND " × " WS-MULTIPLIER " = " WS-PRODUCT *> MULTIPLY with rounding MULTIPLY WS-MULTIPLICAND BY WS-MULTIPLIER GIVING WS-ROUNDED-PRODUCT ROUNDED ADD 1 TO WS-OPERATIONS-COUNT ADD 1 TO WS-SUCCESS-COUNT DISPLAY " Rounded result: " WS-ROUNDED-PRODUCT *> In-place multiplication MOVE 100.00 TO WS-MULTIPLICAND DISPLAY " Before in-place multiply: " WS-MULTIPLICAND MULTIPLY WS-MULTIPLICAND BY 1.15 END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT ADD 1 TO WS-SUCCESS-COUNT DISPLAY " After 15% increase: " WS-MULTIPLICAND DISPLAY SPACES. DEMONSTRATE-PAYROLL-CALCULATIONS. DISPLAY "=== PAYROLL CALCULATIONS ===" DISPLAY SPACES DISPLAY "Calculating employee payroll..." *> Regular pay calculation MULTIPLY WS-HOURS-WORKED BY WS-HOURLY-RATE GIVING WS-GROSS-PAY ROUNDED ON SIZE ERROR DISPLAY " ERROR: Gross pay calculation overflow" MOVE 'Y' TO WS-ERROR-FLAG ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Regular hours: " WS-HOURS-WORKED " @ $" WS-HOURLY-RATE DISPLAY " Gross pay: $" WS-GROSS-PAY ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT *> Overtime calculation IF WS-HOURS-WORKED > 40 COMPUTE WS-HOURS-WORKED = WS-HOURS-WORKED - 40 MULTIPLY WS-HOURS-WORKED BY WS-HOURLY-RATE BY WS-OVERTIME-RATE GIVING WS-OVERTIME-PAY ROUNDED ON SIZE ERROR DISPLAY " ERROR: Overtime calculation overflow" ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Overtime hours: " WS-HOURS-WORKED " @ 1.5x rate" DISPLAY " Overtime pay: $" WS-OVERTIME-PAY ADD WS-OVERTIME-PAY TO WS-GROSS-PAY ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT END-IF DISPLAY " Total gross pay: $" WS-GROSS-PAY DISPLAY SPACES. DEMONSTRATE-FINANCIAL-CALCULATIONS. DISPLAY "=== FINANCIAL CALCULATIONS ===" DISPLAY SPACES DISPLAY "Calculating investment returns..." *> Simple interest calculation MULTIPLY WS-PRINCIPAL BY WS-INTEREST-RATE GIVING WS-ANNUAL-INTEREST ROUNDED ON SIZE ERROR DISPLAY " ERROR: Interest calculation overflow" ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Principal: $" WS-PRINCIPAL DISPLAY " Interest rate: " WS-INTEREST-RATE " (5.25%)" DISPLAY " Annual interest: $" WS-ANNUAL-INTEREST ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT *> Compound interest factor calculation COMPUTE WS-COMPOUND-FACTOR = 1 + WS-INTEREST-RATE *> Multiple years compound calculation PERFORM VARYING WS-YEARS FROM 1 BY 1 UNTIL WS-YEARS > 5 MULTIPLY WS-PRINCIPAL BY WS-COMPOUND-FACTOR GIVING WS-PRINCIPAL ROUNDED ON SIZE ERROR DISPLAY " ERROR: Compound calculation overflow at year " WS-YEARS ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Year " WS-YEARS " value: $" WS-PRINCIPAL ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT END-PERFORM DISPLAY SPACES. DEMONSTRATE-COMMISSION-CALCULATIONS. DISPLAY "=== SALES COMMISSION CALCULATIONS ===" DISPLAY SPACES DISPLAY "Calculating sales commissions..." *> Base commission calculation MULTIPLY WS-SALES-AMOUNT BY WS-COMMISSION-RATE GIVING WS-BASE-COMMISSION ROUNDED ON SIZE ERROR DISPLAY " ERROR: Commission calculation overflow" ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Sales amount: $" WS-SALES-AMOUNT DISPLAY " Commission rate: " WS-COMMISSION-RATE " (3.5%)" DISPLAY " Base commission: $" WS-BASE-COMMISSION ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT *> Bonus commission calculation IF WS-SALES-AMOUNT > 100000 MULTIPLY WS-BASE-COMMISSION BY WS-BONUS-MULTIPLIER GIVING WS-TOTAL-COMMISSION ROUNDED ON SIZE ERROR DISPLAY " ERROR: Bonus calculation overflow" ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Bonus multiplier: " WS-BONUS-MULTIPLIER " (25% bonus)" DISPLAY " Total commission: $" WS-TOTAL-COMMISSION ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT ELSE MOVE WS-BASE-COMMISSION TO WS-TOTAL-COMMISSION DISPLAY " Total commission: $" WS-TOTAL-COMMISSION " (no bonus)" END-IF DISPLAY SPACES. DEMONSTRATE-BATCH-MULTIPLY. DISPLAY "=== BATCH MULTIPLICATION OPERATIONS ===" DISPLAY SPACES DISPLAY "Processing inventory line items..." *> Initialize sample data PERFORM INITIALIZE-PRICE-TABLE *> Process each line item PERFORM VARYING WS-INVENTORY-CALC FROM 1 BY 1 UNTIL WS-INVENTORY-CALC > 10 MULTIPLY WS-ITEM-PRICE(WS-INVENTORY-CALC) BY WS-QUANTITY-SOLD(WS-INVENTORY-CALC) GIVING WS-LINE-TOTAL(WS-INVENTORY-CALC) ROUNDED ON SIZE ERROR DISPLAY " ERROR: Line " WS-INVENTORY-CALC " calculation overflow" MOVE 999999.99 TO WS-LINE-TOTAL(WS-INVENTORY-CALC) ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Line " WS-INVENTORY-CALC ": " WS-QUANTITY-SOLD(WS-INVENTORY-CALC) " × $" WS-ITEM-PRICE(WS-INVENTORY-CALC) " = $" WS-LINE-TOTAL(WS-INVENTORY-CALC) ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT ADD WS-LINE-TOTAL(WS-INVENTORY-CALC) TO WS-GRAND-TOTAL END-PERFORM DISPLAY " Grand total: $" WS-GRAND-TOTAL DISPLAY SPACES. INITIALIZE-PRICE-TABLE. 01 WS-INIT-INDEX PIC 9(2) VALUE 0. 01 WS-BASE-PRICE PIC 9(4)V99 VALUE 10.00. 01 WS-BASE-QUANTITY PIC 9(4) VALUE 5. PERFORM VARYING WS-INIT-INDEX FROM 1 BY 1 UNTIL WS-INIT-INDEX > 10 COMPUTE WS-ITEM-PRICE(WS-INIT-INDEX) = WS-BASE-PRICE * WS-INIT-INDEX COMPUTE WS-QUANTITY-SOLD(WS-INIT-INDEX) = WS-BASE-QUANTITY * WS-INIT-INDEX MOVE 0 TO WS-LINE-TOTAL(WS-INIT-INDEX) END-PERFORM. DEMONSTRATE-ERROR-HANDLING. DISPLAY "=== ERROR HANDLING DEMONSTRATION ===" DISPLAY SPACES DISPLAY "Testing overflow conditions..." *> Test size error with large numbers MOVE 999999.99 TO WS-MULTIPLICAND MOVE 999999.99 TO WS-MULTIPLIER MULTIPLY WS-MULTIPLICAND BY WS-MULTIPLIER GIVING WS-PRODUCT ON SIZE ERROR DISPLAY " SIZE ERROR detected: " WS-MULTIPLICAND " × " WS-MULTIPLIER DISPLAY " Result would exceed field capacity" MOVE 0 TO WS-PRODUCT ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Large multiplication successful: " WS-PRODUCT ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT *> Test with decimal precision MOVE 123.456 TO WS-MULTIPLICAND MOVE 789.123 TO WS-MULTIPLIER MULTIPLY WS-MULTIPLICAND BY WS-MULTIPLIER GIVING WS-PRODUCT ROUNDED ON SIZE ERROR DISPLAY " Decimal precision error" ADD 1 TO WS-ERROR-COUNT NOT ON SIZE ERROR DISPLAY " Precision multiply: " WS-MULTIPLICAND " × " WS-MULTIPLIER " = " WS-PRODUCT ADD 1 TO WS-SUCCESS-COUNT END-MULTIPLY ADD 1 TO WS-OPERATIONS-COUNT DISPLAY SPACES. DISPLAY-CALCULATION-SUMMARY. DISPLAY "=== CALCULATION SUMMARY ===" DISPLAY SPACES DISPLAY "Multiplication operations completed:" DISPLAY " Total operations: " WS-OPERATIONS-COUNT DISPLAY " Successful: " WS-SUCCESS-COUNT DISPLAY " Errors: " WS-ERROR-COUNT IF WS-ERROR-COUNT > 0 COMPUTE WS-MULTIPLICAND = (WS-SUCCESS-COUNT / WS-OPERATIONS-COUNT) * 100 DISPLAY " Success rate: " WS-MULTIPLICAND "%" ELSE DISPLAY " Success rate: 100%" END-IF DISPLAY "MULTIPLY statement benefits:" DISPLAY " ✓ Built-in overflow detection" DISPLAY " ✓ Automatic rounding options" DISPLAY " ✓ Multiple target field support" DISPLAY " ✓ Structured error handling with END-MULTIPLY" DISPLAY " ✓ Efficient arithmetic operations" DISPLAY SPACES.

MULTIPLY Features and Options

Operation Types
  • GIVING: Store result in different field
  • BY: In-place multiplication
  • ROUNDED: Automatic result rounding
  • Multiple targets: One operation, multiple results
Error Handling
  • SIZE ERROR: Overflow condition detection
  • NOT SIZE ERROR: Success condition handling
  • END-MULTIPLY: Explicit scope termination
  • Exception control: Structured error management

Interactive Tutorial

Hands-On Exercise: Business Calculations
Practice using MULTIPLY for real-world business scenarios

Exercise 1: Tax Calculation System

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
01 WS-TAX-CALCULATION. 05 WS-GROSS-INCOME PIC 9(8)V99. 05 WS-TAX-RATE PIC 9V9999. 05 WS-FEDERAL-TAX PIC 9(6)V99. 05 WS-STATE-TAX PIC 9(6)V99. 05 WS-TOTAL-TAX PIC 9(7)V99. PROCEDURE DIVISION. CALCULATE-TAXES. MOVE 75000.00 TO WS-GROSS-INCOME MOVE 0.2200 TO WS-TAX-RATE *> Calculate federal tax MULTIPLY WS-GROSS-INCOME BY WS-TAX-RATE GIVING WS-FEDERAL-TAX ROUNDED ON SIZE ERROR DISPLAY "Federal tax calculation error" MOVE 0 TO WS-FEDERAL-TAX NOT ON SIZE ERROR DISPLAY "Federal tax: $" WS-FEDERAL-TAX END-MULTIPLY *> Calculate state tax (5% of federal) MULTIPLY WS-FEDERAL-TAX BY 0.05 GIVING WS-STATE-TAX ROUNDED ON SIZE ERROR DISPLAY "State tax calculation error" MOVE 0 TO WS-STATE-TAX NOT ON SIZE ERROR DISPLAY "State tax: $" WS-STATE-TAX END-MULTIPLY *> Calculate total tax ADD WS-FEDERAL-TAX TO WS-STATE-TAX GIVING WS-TOTAL-TAX DISPLAY "Total tax liability: $" WS-TOTAL-TAX.

Exercise 2: Compound Interest Calculator

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
01 WS-INVESTMENT-CALC. 05 WS-PRINCIPAL PIC 9(8)V99 VALUE 10000.00. 05 WS-ANNUAL-RATE PIC 9V9999 VALUE 0.0650. 05 WS-COMPOUND-PERIODS PIC 9(2) VALUE 12. 05 WS-YEARS PIC 9(2) VALUE 5. 05 WS-PERIODIC-RATE PIC 9V999999. 05 WS-TOTAL-PERIODS PIC 9(4). 05 WS-COMPOUND-FACTOR PIC 9V999999. 05 WS-FINAL-VALUE PIC 9(8)V99. PROCEDURE DIVISION. CALCULATE-COMPOUND-INTEREST. *> Calculate periodic interest rate DIVIDE WS-ANNUAL-RATE BY WS-COMPOUND-PERIODS GIVING WS-PERIODIC-RATE ROUNDED *> Calculate total compounding periods MULTIPLY WS-YEARS BY WS-COMPOUND-PERIODS GIVING WS-TOTAL-PERIODS *> Calculate compound factor (1 + r) ADD 1 TO WS-PERIODIC-RATE GIVING WS-COMPOUND-FACTOR *> Apply compound factor for each period MOVE WS-PRINCIPAL TO WS-FINAL-VALUE PERFORM VARYING WS-YEARS FROM 1 BY 1 UNTIL WS-YEARS > WS-TOTAL-PERIODS MULTIPLY WS-FINAL-VALUE BY WS-COMPOUND-FACTOR GIVING WS-FINAL-VALUE ROUNDED ON SIZE ERROR DISPLAY "Compound calculation overflow" EXIT PERFORM END-MULTIPLY END-PERFORM DISPLAY "Investment growth:" DISPLAY " Principal: $" WS-PRINCIPAL DISPLAY " Final value: $" WS-FINAL-VALUE COMPUTE WS-COMPOUND-FACTOR = WS-FINAL-VALUE - WS-PRINCIPAL DISPLAY " Interest earned: $" WS-COMPOUND-FACTOR.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: MULTIPLY Formats

What's the difference between MULTIPLY...BY and MULTIPLY...GIVING?

Answer: MULTIPLY...BY performs in-place multiplication, storing the result back in the second operand. MULTIPLY...GIVING stores the result in a separate field, preserving the original operands. GIVING allows multiple target fields.

Question 2: Error Handling

How does SIZE ERROR work with MULTIPLY operations?

Answer: SIZE ERROR is triggered when the multiplication result exceeds the capacity of the target field. It allows you to handle overflow conditions gracefully, providing alternative actions when calculations would cause data loss.

Question 3: Rounding

When should you use the ROUNDED option with MULTIPLY?

Answer: Use ROUNDED for financial calculations, currency operations, or when precision matters. It applies proper rounding rules when the result has more decimal places than the target field can store, ensuring accurate monetary calculations.

Related Pages