MainframeMaster

COBOL Tutorial

COBOL PACKED-DECIMAL

The PACKED-DECIMAL data type in COBOL represents sophisticated numeric storage optimization and comprehensive decimal arithmetic capabilities within mainframe programming environments, providing advanced space-efficient encoding mechanisms for numeric data, enhanced computational performance features, and intelligent decimal precision management patterns that enable optimal storage utilization, efficient arithmetic processing workflows, and systematic numeric data handling requirements while maintaining calculation accuracy, ensuring optimal performance characteristics, and enabling scalable numeric architectures across enterprise applications requiring precise decimal arithmetic, efficient storage capabilities, and reliable numeric processing throughout sophisticated financial calculation scenarios and high-volume numeric data operations.

PACKED-DECIMAL Definition and Usage

Basic PACKED-DECIMAL Syntax and Storage
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
*> Basic PACKED-DECIMAL definitions 01 FINANCIAL-DATA. 05 ACCOUNT-BALANCE PIC 9(9)V99 USAGE IS PACKED-DECIMAL. 05 TRANSACTION-AMOUNT PIC S9(7)V99 USAGE PACKED-DECIMAL. 05 INTEREST-RATE PIC 9V9999 USAGE IS PACKED-DECIMAL. 05 CUSTOMER-CREDIT-LIMIT PIC 9(8)V99 PACKED-DECIMAL. *> Alternative COMP-3 syntax (equivalent to PACKED-DECIMAL) 01 PAYROLL-DATA. 05 EMPLOYEE-SALARY PIC 9(7)V99 COMP-3. 05 OVERTIME-HOURS PIC 9(3)V9 COMP-3. 05 TAX-RATE PIC 9V999 COMP-3. 05 DEDUCTION-AMOUNT PIC S9(6)V99 COMP-3. *> Mixed precision PACKED-DECIMAL fields 01 STATISTICAL-DATA. 05 SAMPLE-COUNT PIC 9(8) PACKED-DECIMAL. 05 MEAN-VALUE PIC S9(7)V9999 PACKED-DECIMAL. 05 STANDARD-DEVIATION PIC 9(6)V99999 PACKED-DECIMAL. 05 VARIANCE PIC 9(8)V9999 PACKED-DECIMAL. *> Inventory management with PACKED-DECIMAL 01 INVENTORY-RECORD. 05 ITEM-CODE PIC X(12). 05 QUANTITY-ON-HAND PIC 9(7) PACKED-DECIMAL. 05 UNIT-COST PIC 9(5)V999 PACKED-DECIMAL. 05 EXTENDED-VALUE PIC 9(10)V99 PACKED-DECIMAL. 05 REORDER-POINT PIC 9(6) PACKED-DECIMAL. 05 MAXIMUM-STOCK PIC 9(7) PACKED-DECIMAL. *> Arithmetic operations with PACKED-DECIMAL PROCEDURE DIVISION. PACKED-DECIMAL-CALCULATIONS. *> Basic arithmetic with automatic decimal alignment ADD TRANSACTION-AMOUNT TO ACCOUNT-BALANCE SUBTRACT DEDUCTION-AMOUNT FROM EMPLOYEE-SALARY MULTIPLY UNIT-COST BY QUANTITY-ON-HAND GIVING EXTENDED-VALUE DIVIDE EMPLOYEE-SALARY BY 12 GIVING MONTHLY-SALARY *> Complex calculations maintain precision COMPUTE INTEREST-AMOUNT = ACCOUNT-BALANCE * INTEREST-RATE COMPUTE NET-PAY = EMPLOYEE-SALARY - (EMPLOYEE-SALARY * TAX-RATE) COMPUTE STATISTICAL-VARIANCE = (MEAN-VALUE * MEAN-VALUE) - (SAMPLE-COUNT * STANDARD-DEVIATION) *> Working with different precision levels 01 CURRENCY-CONVERSION. 05 USD-AMOUNT PIC 9(9)V99 PACKED-DECIMAL. 05 EXCHANGE-RATE PIC 9V999999 PACKED-DECIMAL. 05 FOREIGN-AMOUNT PIC 9(11)V99 PACKED-DECIMAL. 05 CONVERSION-FEE PIC 9(6)V999 PACKED-DECIMAL. CURRENCY-CONVERSION-PROC. COMPUTE FOREIGN-AMOUNT = USD-AMOUNT * EXCHANGE-RATE COMPUTE CONVERSION-FEE = FOREIGN-AMOUNT * 0.025 SUBTRACT CONVERSION-FEE FROM FOREIGN-AMOUNT *> PACKED-DECIMAL in table operations 01 SALES-ANALYSIS. 05 MONTHLY-SALES OCCURS 12 TIMES. 10 SALES-AMOUNT PIC 9(8)V99 PACKED-DECIMAL. 10 COMMISSION-RATE PIC 9V999 PACKED-DECIMAL. 10 COMMISSION-EARNED PIC 9(6)V99 PACKED-DECIMAL. 05 ANNUAL-TOTAL PIC 9(10)V99 PACKED-DECIMAL. 05 AVERAGE-MONTHLY PIC 9(8)V99 PACKED-DECIMAL. SALES-ANALYSIS-PROC. MOVE ZERO TO ANNUAL-TOTAL PERFORM VARYING MONTH-INDEX FROM 1 BY 1 UNTIL MONTH-INDEX > 12 COMPUTE COMMISSION-EARNED(MONTH-INDEX) = SALES-AMOUNT(MONTH-INDEX) * COMMISSION-RATE(MONTH-INDEX) ADD SALES-AMOUNT(MONTH-INDEX) TO ANNUAL-TOTAL END-PERFORM DIVIDE ANNUAL-TOTAL BY 12 GIVING AVERAGE-MONTHLY
Space Efficient
Decimal Precision
Mainframe Optimized

Storage Layout and Internal Representation

PACKED-DECIMAL Storage Format
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
*> Understanding PACKED-DECIMAL storage layout *> PIC 9(5) PACKED-DECIMAL stores value 12345 as: *> Byte 1: 12 (hex) *> Byte 2: 34 (hex) *> Byte 3: 5F (hex) - where F indicates positive sign *> Storage calculations for PACKED-DECIMAL fields 01 STORAGE-EXAMPLES. *> PIC 9(3) PACKED-DECIMAL = 2 bytes ((3+1)/2) 05 SMALL-AMOUNT PIC 9(3) PACKED-DECIMAL. *> PIC 9(5) PACKED-DECIMAL = 3 bytes ((5+1)/2) 05 MEDIUM-AMOUNT PIC 9(5) PACKED-DECIMAL. *> PIC S9(7)V99 PACKED-DECIMAL = 5 bytes ((7+2+1)/2) 05 LARGE-AMOUNT PIC S9(7)V99 PACKED-DECIMAL. *> PIC 9(9)V999 PACKED-DECIMAL = 7 bytes ((9+3+1)/2) 05 PRECISION-AMOUNT PIC 9(9)V999 PACKED-DECIMAL. *> Demonstrating storage efficiency 01 STORAGE-COMPARISON. *> Display format: 9 bytes 05 DISPLAY-PRICE PIC 9(7)V99 DISPLAY. *> Packed format: 5 bytes (44% storage savings) 05 PACKED-PRICE PIC 9(7)V99 PACKED-DECIMAL. *> Binary format: 4 bytes but loses decimal precision 05 BINARY-PRICE PIC 9(9) BINARY. *> Sign handling in PACKED-DECIMAL 01 SIGNED-PACKED-EXAMPLES. 05 POSITIVE-BALANCE PIC 9(7)V99 PACKED-DECIMAL VALUE +1234.56. 05 NEGATIVE-BALANCE PIC S9(7)V99 PACKED-DECIMAL VALUE -1234.56. 05 UNSIGNED-AMOUNT PIC 9(6) PACKED-DECIMAL VALUE 123456. *> Internal representation examples: *> Value +123.45 in PIC S9(3)V99 PACKED-DECIMAL: *> Hex: 12 34 5F (F = positive sign) *> *> Value -123.45 in PIC S9(3)V99 PACKED-DECIMAL: *> Hex: 12 34 5D (D = negative sign) *> *> Value 12345 in PIC 9(5) PACKED-DECIMAL: *> Hex: 01 23 45 (implicit positive, no sign needed) DISPLAY-STORAGE-INFO. DISPLAY "Storage Requirements:" DISPLAY "PIC 9(3) PACKED-DECIMAL: " FUNCTION LENGTH(SMALL-AMOUNT) " bytes" DISPLAY "PIC 9(5) PACKED-DECIMAL: " FUNCTION LENGTH(MEDIUM-AMOUNT) " bytes" DISPLAY "PIC S9(7)V99 PACKED-DECIMAL: " FUNCTION LENGTH(LARGE-AMOUNT) " bytes" DISPLAY "PIC 9(9)V999 PACKED-DECIMAL: " FUNCTION LENGTH(PRECISION-AMOUNT) " bytes" *> Conversion between formats CONVERT-FORMATS. *> Move from display to packed (automatic conversion) MOVE "0001234.56" TO DISPLAY-PRICE MOVE DISPLAY-PRICE TO PACKED-PRICE *> Move from packed to display (automatic conversion) MOVE PACKED-PRICE TO DISPLAY-PRICE *> Arithmetic preserves packed format efficiency ADD 100.50 TO PACKED-PRICE MULTIPLY PACKED-PRICE BY 1.05 GIVING PACKED-PRICE DISPLAY "Packed price after calculations: " PACKED-PRICE

Advanced PACKED-DECIMAL Applications

Financial Processing
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
*> Banking transaction processing 01 BANK-TRANSACTION. 05 TRANSACTION-ID PIC X(12). 05 ACCOUNT-NUMBER PIC 9(10). 05 TRANSACTION-AMOUNT PIC S9(11)V99 PACKED-DECIMAL. 05 RUNNING-BALANCE PIC S9(13)V99 PACKED-DECIMAL. 05 AVAILABLE-CREDIT PIC 9(9)V99 PACKED-DECIMAL. 05 INTEREST-EARNED PIC 9(8)V999 PACKED-DECIMAL. PROCESS-BANKING-TRANSACTION. *> High-precision interest calculation COMPUTE DAILY-INTEREST = RUNNING-BALANCE * DAILY-RATE ADD DAILY-INTEREST TO INTEREST-EARNED *> Overdraft protection calculation IF TRANSACTION-AMOUNT < ZERO IF ABS(TRANSACTION-AMOUNT) > (RUNNING-BALANCE + AVAILABLE-CREDIT) DISPLAY "Insufficient funds" PERFORM DECLINE-TRANSACTION END-IF END-IF ADD TRANSACTION-AMOUNT TO RUNNING-BALANCE
Statistical Analysis
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
*> Scientific calculation with precision 01 STATISTICS-WORK. 05 DATA-POINTS OCCURS 1000 TIMES. 10 MEASURED-VALUE PIC S9(8)V99999 PACKED-DECIMAL. 05 SUM-VALUES PIC S9(15)V99999 PACKED-DECIMAL. 05 MEAN-VALUE PIC S9(10)V99999 PACKED-DECIMAL. 05 VARIANCE PIC S9(12)V999999 PACKED-DECIMAL. 05 STD-DEVIATION PIC S9(10)V999999 PACKED-DECIMAL. CALCULATE-STATISTICS. *> Calculate mean with high precision MOVE ZERO TO SUM-VALUES PERFORM VARYING I FROM 1 BY 1 UNTIL I > 1000 ADD MEASURED-VALUE(I) TO SUM-VALUES END-PERFORM DIVIDE SUM-VALUES BY 1000 GIVING MEAN-VALUE *> Calculate variance MOVE ZERO TO VARIANCE PERFORM VARYING I FROM 1 BY 1 UNTIL I > 1000 COMPUTE WS-DIFF = MEASURED-VALUE(I) - MEAN-VALUE COMPUTE WS-SQUARED-DIFF = WS-DIFF * WS-DIFF ADD WS-SQUARED-DIFF TO VARIANCE END-PERFORM DIVIDE VARIANCE BY 999 GIVING VARIANCE

Comprehensive PACKED-DECIMAL Implementation

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
IDENTIFICATION DIVISION. PROGRAM-ID. PACKED-DECIMAL-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Financial portfolio management system 01 PORTFOLIO-MANAGEMENT. 05 PORTFOLIO-ID PIC X(10). 05 TOTAL-INVESTMENTS PIC 9(12)V99 PACKED-DECIMAL. 05 CURRENT-VALUE PIC 9(13)V99 PACKED-DECIMAL. 05 GAIN-LOSS PIC S9(11)V99 PACKED-DECIMAL. 05 PERCENTAGE-RETURN PIC S9(3)V9999 PACKED-DECIMAL. 05 DIVIDEND-INCOME PIC 9(9)V99 PACKED-DECIMAL. 05 ANNUAL-FEE PIC 9(6)V99 PACKED-DECIMAL. 01 INVESTMENT-HOLDINGS OCCURS 50 TIMES. 05 STOCK-SYMBOL PIC X(6). 05 SHARES-OWNED PIC 9(8)V999 PACKED-DECIMAL. 05 PURCHASE-PRICE PIC 9(6)V999 PACKED-DECIMAL. 05 CURRENT-PRICE PIC 9(6)V999 PACKED-DECIMAL. 05 MARKET-VALUE PIC 9(11)V99 PACKED-DECIMAL. 05 UNREALIZED-GAIN PIC S9(9)V99 PACKED-DECIMAL. 05 DIVIDEND-YIELD PIC 9V99999 PACKED-DECIMAL. *> Currency exchange system 01 CURRENCY-EXCHANGE. 05 EXCHANGE-RATES OCCURS 10 TIMES. 10 CURRENCY-CODE PIC X(3). 10 USD-RATE PIC 9(2)V999999 PACKED-DECIMAL. 10 BUY-RATE PIC 9(2)V999999 PACKED-DECIMAL. 10 SELL-RATE PIC 9(2)V999999 PACKED-DECIMAL. 05 CONVERSION-AMOUNTS OCCURS 10 TIMES. 10 SOURCE-AMOUNT PIC 9(11)V99 PACKED-DECIMAL. 10 TARGET-AMOUNT PIC 9(11)V99 PACKED-DECIMAL. 10 CONVERSION-FEE PIC 9(7)V999 PACKED-DECIMAL. *> Loan amortization calculations 01 LOAN-AMORTIZATION. 05 PRINCIPAL-AMOUNT PIC 9(9)V99 PACKED-DECIMAL. 05 ANNUAL-INTEREST-RATE PIC 9V999999 PACKED-DECIMAL. 05 LOAN-TERM-MONTHS PIC 9(3) PACKED-DECIMAL. 05 MONTHLY-PAYMENT PIC 9(6)V99 PACKED-DECIMAL. 05 TOTAL-INTEREST PIC 9(9)V99 PACKED-DECIMAL. 05 REMAINING-BALANCE PIC 9(9)V99 PACKED-DECIMAL. 01 PAYMENT-SCHEDULE OCCURS 360 TIMES. 05 PAYMENT-NUMBER PIC 9(3). 05 PRINCIPAL-PAYMENT PIC 9(6)V99 PACKED-DECIMAL. 05 INTEREST-PAYMENT PIC 9(6)V99 PACKED-DECIMAL. 05 BALANCE-REMAINING PIC 9(9)V99 PACKED-DECIMAL. *> Performance measurement data 01 PERFORMANCE-METRICS. 05 CALCULATION-COUNT PIC 9(8) PACKED-DECIMAL. 05 TOTAL-PROCESSING-TIME PIC 9(8)V999 PACKED-DECIMAL. 05 AVERAGE-CALC-TIME PIC 9(5)V999999 PACKED-DECIMAL. 05 MEMORY-USAGE PIC 9(8) PACKED-DECIMAL. PROCEDURE DIVISION. MAIN-PACKED-DECIMAL-DEMO. DISPLAY "=== PACKED-DECIMAL DEMONSTRATION ===" PERFORM INITIALIZE-DEMO-DATA PERFORM DEMONSTRATE-PORTFOLIO-MANAGEMENT PERFORM DEMONSTRATE-CURRENCY-EXCHANGE PERFORM DEMONSTRATE-LOAN-CALCULATIONS PERFORM DEMONSTRATE-PERFORMANCE-ANALYSIS PERFORM DISPLAY-STORAGE-EFFICIENCY DISPLAY "=== PACKED-DECIMAL DEMO COMPLETE ===" STOP RUN. INITIALIZE-DEMO-DATA. DISPLAY "Initializing PACKED-DECIMAL demonstration data..." *> Initialize portfolio data MOVE "PORT12345" TO PORTFOLIO-ID MOVE 500000.00 TO TOTAL-INVESTMENTS MOVE 0 TO CURRENT-VALUE MOVE 0 TO DIVIDEND-INCOME MOVE 250.00 TO ANNUAL-FEE *> Initialize sample holdings MOVE "AAPL" TO STOCK-SYMBOL(1) MOVE 100.000 TO SHARES-OWNED(1) MOVE 150.250 TO PURCHASE-PRICE(1) MOVE 175.500 TO CURRENT-PRICE(1) MOVE 0.0234 TO DIVIDEND-YIELD(1) MOVE "MSFT" TO STOCK-SYMBOL(2) MOVE 75.500 TO SHARES-OWNED(2) MOVE 280.750 TO PURCHASE-PRICE(2) MOVE 325.100 TO CURRENT-PRICE(2) MOVE 0.0156 TO DIVIDEND-YIELD(2) *> Initialize exchange rates MOVE "EUR" TO CURRENCY-CODE(1) MOVE 1.185000 TO USD-RATE(1) MOVE 1.187000 TO BUY-RATE(1) MOVE 1.183000 TO SELL-RATE(1) MOVE "GBP" TO CURRENCY-CODE(2) MOVE 1.375000 TO USD-RATE(2) MOVE 1.378000 TO BUY-RATE(2) MOVE 1.372000 TO SELL-RATE(2) *> Initialize loan data MOVE 250000.00 TO PRINCIPAL-AMOUNT MOVE 0.045000 TO ANNUAL-INTEREST-RATE MOVE 360 TO LOAN-TERM-MONTHS DISPLAY "✅ Demo data initialized with PACKED-DECIMAL precision". DEMONSTRATE-PORTFOLIO-MANAGEMENT. DISPLAY " " DISPLAY "=== PORTFOLIO MANAGEMENT WITH PACKED-DECIMAL ===" *> Calculate market values with precise arithmetic PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 2 COMPUTE MARKET-VALUE(WS-INDEX) = SHARES-OWNED(WS-INDEX) * CURRENT-PRICE(WS-INDEX) COMPUTE UNREALIZED-GAIN(WS-INDEX) = MARKET-VALUE(WS-INDEX) - (SHARES-OWNED(WS-INDEX) * PURCHASE-PRICE(WS-INDEX)) ADD MARKET-VALUE(WS-INDEX) TO CURRENT-VALUE ADD UNREALIZED-GAIN(WS-INDEX) TO GAIN-LOSS *> Calculate annual dividend income COMPUTE WS-DIVIDEND-INCOME = MARKET-VALUE(WS-INDEX) * DIVIDEND-YIELD(WS-INDEX) ADD WS-DIVIDEND-INCOME TO DIVIDEND-INCOME END-PERFORM *> Calculate percentage return COMPUTE PERCENTAGE-RETURN = (GAIN-LOSS / TOTAL-INVESTMENTS) * 100 DISPLAY "Portfolio Analysis Results:" DISPLAY " 📊 Total Investment: $" TOTAL-INVESTMENTS DISPLAY " 💰 Current Value: $" CURRENT-VALUE DISPLAY " 📈 Gain/Loss: $" GAIN-LOSS DISPLAY " 📉 Return %: " PERCENTAGE-RETURN "%" DISPLAY " 💵 Annual Dividends: $" DIVIDEND-INCOME *> Detailed holdings PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 2 DISPLAY " 🏢 " STOCK-SYMBOL(WS-INDEX) ":" DISPLAY " Shares: " SHARES-OWNED(WS-INDEX) DISPLAY " Market Value: $" MARKET-VALUE(WS-INDEX) DISPLAY " Unrealized Gain: $" UNREALIZED-GAIN(WS-INDEX) END-PERFORM. DEMONSTRATE-CURRENCY-EXCHANGE. DISPLAY " " DISPLAY "=== CURRENCY EXCHANGE WITH PACKED-DECIMAL ===" *> Convert USD to foreign currencies MOVE 10000.00 TO SOURCE-AMOUNT(1) COMPUTE TARGET-AMOUNT(1) = SOURCE-AMOUNT(1) / USD-RATE(1) COMPUTE CONVERSION-FEE(1) = TARGET-AMOUNT(1) * 0.0025 SUBTRACT CONVERSION-FEE(1) FROM TARGET-AMOUNT(1) MOVE 5000.00 TO SOURCE-AMOUNT(2) COMPUTE TARGET-AMOUNT(2) = SOURCE-AMOUNT(2) / USD-RATE(2) COMPUTE CONVERSION-FEE(2) = TARGET-AMOUNT(2) * 0.0025 SUBTRACT CONVERSION-FEE(2) FROM TARGET-AMOUNT(2) DISPLAY "Currency Conversion Results:" DISPLAY " 💱 USD to EUR:" DISPLAY " Amount: $" SOURCE-AMOUNT(1) DISPLAY " Rate: " USD-RATE(1) DISPLAY " Converted: €" TARGET-AMOUNT(1) DISPLAY " Fee: €" CONVERSION-FEE(1) DISPLAY " 💱 USD to GBP:" DISPLAY " Amount: $" SOURCE-AMOUNT(2) DISPLAY " Rate: " USD-RATE(2) DISPLAY " Converted: £" TARGET-AMOUNT(2) DISPLAY " Fee: £" CONVERSION-FEE(2). DEMONSTRATE-LOAN-CALCULATIONS. DISPLAY " " DISPLAY "=== LOAN AMORTIZATION WITH PACKED-DECIMAL ===" *> Calculate monthly payment using precise arithmetic COMPUTE WS-MONTHLY-RATE = ANNUAL-INTEREST-RATE / 12 COMPUTE WS-RATE-FACTOR = (1 + WS-MONTHLY-RATE) ** LOAN-TERM-MONTHS COMPUTE MONTHLY-PAYMENT = PRINCIPAL-AMOUNT * (WS-MONTHLY-RATE * WS-RATE-FACTOR) / (WS-RATE-FACTOR - 1) *> Calculate total interest COMPUTE TOTAL-INTEREST = (MONTHLY-PAYMENT * LOAN-TERM-MONTHS) - PRINCIPAL-AMOUNT DISPLAY "Loan Analysis Results:" DISPLAY " 🏠 Principal: $" PRINCIPAL-AMOUNT DISPLAY " 📊 Interest Rate: " ANNUAL-INTEREST-RATE DISPLAY " 📅 Term: " LOAN-TERM-MONTHS " months" DISPLAY " 💳 Monthly Payment: $" MONTHLY-PAYMENT DISPLAY " 💰 Total Interest: $" TOTAL-INTEREST *> Generate first few payment details MOVE PRINCIPAL-AMOUNT TO REMAINING-BALANCE PERFORM VARYING PAYMENT-NUM FROM 1 BY 1 UNTIL PAYMENT-NUM > 5 COMPUTE INTEREST-PAYMENT(PAYMENT-NUM) = REMAINING-BALANCE * WS-MONTHLY-RATE COMPUTE PRINCIPAL-PAYMENT(PAYMENT-NUM) = MONTHLY-PAYMENT - INTEREST-PAYMENT(PAYMENT-NUM) SUBTRACT PRINCIPAL-PAYMENT(PAYMENT-NUM) FROM REMAINING-BALANCE MOVE REMAINING-BALANCE TO BALANCE-REMAINING(PAYMENT-NUM) DISPLAY " Payment " PAYMENT-NUM ":" DISPLAY " Principal: $" PRINCIPAL-PAYMENT(PAYMENT-NUM) DISPLAY " Interest: $" INTEREST-PAYMENT(PAYMENT-NUM) DISPLAY " Balance: $" BALANCE-REMAINING(PAYMENT-NUM) END-PERFORM. DEMONSTRATE-PERFORMANCE-ANALYSIS. DISPLAY " " DISPLAY "=== PERFORMANCE ANALYSIS ===" *> Measure calculation performance MOVE FUNCTION CURRENT-DATE(9:8) TO WS-START-TIME MOVE 0 TO CALCULATION-COUNT *> Perform intensive calculations PERFORM 1000 TIMES ADD 1 TO CALCULATION-COUNT COMPUTE WS-RESULT = (CURRENT-VALUE * PERCENTAGE-RETURN / 100) + (DIVIDEND-INCOME * 1.05) - (ANNUAL-FEE / 12) END-PERFORM MOVE FUNCTION CURRENT-DATE(9:8) TO WS-END-TIME COMPUTE TOTAL-PROCESSING-TIME = WS-END-TIME - WS-START-TIME COMPUTE AVERAGE-CALC-TIME = TOTAL-PROCESSING-TIME / CALCULATION-COUNT DISPLAY "Performance Metrics:" DISPLAY " ⚡ Calculations: " CALCULATION-COUNT DISPLAY " 🕐 Total Time: " TOTAL-PROCESSING-TIME " ms" DISPLAY " 📊 Avg Time: " AVERAGE-CALC-TIME " ms per calc" DISPLAY " 💾 Precision maintained throughout calculations". DISPLAY-STORAGE-EFFICIENCY. DISPLAY " " DISPLAY "📦 PACKED-DECIMAL STORAGE EFFICIENCY" DISPLAY "=====================================" DISPLAY "Storage Comparison for Financial Data:" DISPLAY " • Portfolio Value PIC 9(13)V99:" DISPLAY " PACKED-DECIMAL: " FUNCTION LENGTH(CURRENT-VALUE) " bytes" DISPLAY " DISPLAY format would be: 15 bytes" DISPLAY " Space savings: " ((15 - FUNCTION LENGTH(CURRENT-VALUE)) / 15) * 100 "%" DISPLAY " " DISPLAY "🎯 Key PACKED-DECIMAL Benefits Demonstrated:" DISPLAY " • 50% storage reduction vs DISPLAY" DISPLAY " • Automatic decimal alignment" DISPLAY " • High precision arithmetic" DISPLAY " • Mainframe-optimized performance" DISPLAY " • Exact decimal representation" DISPLAY " • Efficient bulk calculations".

PACKED-DECIMAL Features and Benefits

Storage Efficiency
  • • 50% storage reduction vs DISPLAY
  • • Two digits per byte compression
  • • Efficient sign storage
  • • Minimal memory footprint
Arithmetic Performance
  • • Hardware-optimized operations
  • • Faster decimal arithmetic
  • • Automatic decimal alignment
  • • Reduced CPU overhead
Precision Control
  • • Exact decimal representation
  • • No floating-point errors
  • • Configurable decimal places
  • • Financial calculation accuracy
Business Applications
  • • Financial transaction processing
  • • Currency calculations
  • • Statistical analysis
  • • Inventory management

Best Practices

Related Pages