The OVERFLOW condition in COBOL represents comprehensive arithmetic exception detection capabilities and sophisticated numeric overflow management functionality within mainframe programming environments, providing advanced error handling mechanisms for arithmetic operations, enhanced precision control features, and intelligent overflow detection patterns that enable precise calculation error management, robust numeric operation validation, and systematic overflow handling requirements while maintaining data accuracy, ensuring calculation reliability, and enabling defensive programming architectures across enterprise applications requiring exact arithmetic precision, overflow detection capabilities, and reliable numeric processing throughout sophisticated financial calculation scenarios and high-precision mathematical workflows.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116*> Basic ADD with OVERFLOW handling ADD SALES-AMOUNT TO TOTAL-SALES ON OVERFLOW DISPLAY "Sales total overflow detected" PERFORM OVERFLOW-ERROR-HANDLING NOT ON OVERFLOW DISPLAY "Sales added successfully: " TOTAL-SALES END-ADD *> SUBTRACT with OVERFLOW detection SUBTRACT DISCOUNT-AMOUNT FROM CUSTOMER-BALANCE ON OVERFLOW DISPLAY "Balance calculation overflow" MOVE "OVERFLOW" TO TRANSACTION-STATUS PERFORM LOG-OVERFLOW-ERROR NOT ON OVERFLOW DISPLAY "New balance: " CUSTOMER-BALANCE MOVE "SUCCESS" TO TRANSACTION-STATUS END-SUBTRACT *> MULTIPLY with OVERFLOW handling MULTIPLY UNIT-PRICE BY QUANTITY GIVING LINE-TOTAL ON OVERFLOW DISPLAY "Line total calculation overflow" DISPLAY "Unit Price: " UNIT-PRICE DISPLAY "Quantity: " QUANTITY PERFORM CALCULATE-ALTERNATIVE-TOTAL NOT ON OVERFLOW DISPLAY "Line total calculated: " LINE-TOTAL END-MULTIPLY *> DIVIDE with OVERFLOW protection DIVIDE TOTAL-AMOUNT BY PAYMENT-PERIODS GIVING MONTHLY-PAYMENT ON OVERFLOW DISPLAY "Monthly payment calculation overflow" PERFORM USE-EXTENDED-PRECISION-CALCULATION NOT ON OVERFLOW DISPLAY "Monthly payment: " MONTHLY-PAYMENT PERFORM VALIDATE-PAYMENT-AMOUNT END-DIVIDE *> Complex calculation with multiple OVERFLOW checks 01 FINANCIAL-CALCULATIONS. 05 PRINCIPAL-AMOUNT PIC 9(9)V99. 05 INTEREST-RATE PIC 9V9999. 05 TIME-PERIODS PIC 9(3). 05 COMPOUND-AMOUNT PIC 9(11)V99. 05 INTEREST-EARNED PIC 9(9)V99. *> Compound interest calculation with overflow protection MULTIPLY PRINCIPAL-AMOUNT BY INTEREST-RATE GIVING WS-TEMP-CALC ON OVERFLOW DISPLAY "Interest calculation overflow - using alternative method" PERFORM ALTERNATIVE-INTEREST-CALCULATION NOT ON OVERFLOW ADD WS-TEMP-CALC TO PRINCIPAL-AMOUNT ON OVERFLOW DISPLAY "Principal addition overflow" PERFORM OVERFLOW-RECOVERY-PROCEDURE NOT ON OVERFLOW MOVE PRINCIPAL-AMOUNT TO COMPOUND-AMOUNT END-ADD END-MULTIPLY *> Payroll calculation with comprehensive overflow handling 01 PAYROLL-CALCULATION. 05 HOURS-WORKED PIC 9(3)V9. 05 HOURLY-RATE PIC 9(3)V99. 05 REGULAR-PAY PIC 9(7)V99. 05 OVERTIME-PAY PIC 9(7)V99. 05 TOTAL-GROSS-PAY PIC 9(8)V99. 05 TAX-DEDUCTION PIC 9(7)V99. 05 NET-PAY PIC 9(8)V99. *> Calculate regular pay IF HOURS-WORKED <= 40 MULTIPLY HOURS-WORKED BY HOURLY-RATE GIVING REGULAR-PAY ON OVERFLOW DISPLAY "Regular pay overflow for employee: " EMPLOYEE-ID PERFORM PAYROLL-OVERFLOW-HANDLING NOT ON OVERFLOW MOVE 0 TO OVERTIME-PAY END-MULTIPLY ELSE MULTIPLY 40 BY HOURLY-RATE GIVING REGULAR-PAY ON OVERFLOW PERFORM PAYROLL-OVERFLOW-HANDLING NOT ON OVERFLOW COMPUTE WS-OVERTIME-HOURS = HOURS-WORKED - 40 MULTIPLY WS-OVERTIME-HOURS BY HOURLY-RATE BY 1.5 GIVING OVERTIME-PAY ON OVERFLOW DISPLAY "Overtime pay overflow" PERFORM PAYROLL-OVERFLOW-HANDLING NOT ON OVERFLOW CONTINUE END-MULTIPLY END-MULTIPLY END-IF *> Calculate total gross pay ADD REGULAR-PAY TO OVERTIME-PAY GIVING TOTAL-GROSS-PAY ON OVERFLOW DISPLAY "Total pay calculation overflow" PERFORM PAYROLL-OVERFLOW-HANDLING NOT ON OVERFLOW PERFORM CALCULATE-TAX-DEDUCTION SUBTRACT TAX-DEDUCTION FROM TOTAL-GROSS-PAY GIVING NET-PAY ON OVERFLOW DISPLAY "Net pay calculation overflow" PERFORM PAYROLL-OVERFLOW-HANDLING NOT ON OVERFLOW DISPLAY "Payroll calculated successfully" DISPLAY "Net Pay: " NET-PAY END-SUBTRACT END-ADD
12345678910111213141516171819202122232425262728*> Investment growth calculation 01 INVESTMENT-DATA. 05 INITIAL-INVESTMENT PIC 9(9)V99. 05 ANNUAL-RETURN-RATE PIC 9V999. 05 YEARS-INVESTED PIC 9(2). 05 PROJECTED-VALUE PIC 9(11)V99. *> Safe compound growth calculation MOVE INITIAL-INVESTMENT TO PROJECTED-VALUE PERFORM VARYING YEAR-COUNTER FROM 1 BY 1 UNTIL YEAR-COUNTER > YEARS-INVESTED MULTIPLY PROJECTED-VALUE BY ANNUAL-RETURN-RATE GIVING WS-GROWTH-AMOUNT ON OVERFLOW DISPLAY "Growth calculation overflow at year " YEAR-COUNTER PERFORM USE-EXTENDED-PRECISION NOT ON OVERFLOW ADD WS-GROWTH-AMOUNT TO PROJECTED-VALUE ON OVERFLOW DISPLAY "Value accumulation overflow" PERFORM INVESTMENT-OVERFLOW-HANDLING NOT ON OVERFLOW CONTINUE END-ADD END-MULTIPLY END-PERFORM
1234567891011121314151617181920212223*> Inventory value calculation 01 INVENTORY-TOTALS. 05 UNIT-COUNT PIC 9(7). 05 UNIT-COST PIC 9(5)V99. 05 TOTAL-VALUE PIC 9(11)V99. 05 WEIGHTED-AVERAGE PIC 9(7)V99. *> Calculate total inventory value MULTIPLY UNIT-COUNT BY UNIT-COST GIVING TOTAL-VALUE ON OVERFLOW DISPLAY "Inventory value overflow" DISPLAY "Units: " UNIT-COUNT DISPLAY "Cost: " UNIT-COST PERFORM INVENTORY-OVERFLOW-RECOVERY NOT ON OVERFLOW ADD TOTAL-VALUE TO GRAND-TOTAL-INVENTORY ON OVERFLOW DISPLAY "Grand total overflow" PERFORM GRAND-TOTAL-OVERFLOW-HANDLING NOT ON OVERFLOW ADD 1 TO PROCESSED-ITEMS END-ADD END-MULTIPLY
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300IDENTIFICATION DIVISION. PROGRAM-ID. OVERFLOW-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 OVERFLOW-DEMONSTRATION-DATA. 05 OVERFLOW-COUNT PIC 9(4) VALUE 0. 05 SUCCESSFUL-OPERATIONS PIC 9(4) VALUE 0. 05 TOTAL-OPERATIONS PIC 9(4) VALUE 0. 05 DEMO-COUNTER PIC 9(3) VALUE 0. 01 ARITHMETIC-TEST-DATA. 05 LARGE-NUMBER-1 PIC 9(9) VALUE 999999999. 05 LARGE-NUMBER-2 PIC 9(9) VALUE 999999999. 05 RESULT-FIELD PIC 9(9). 05 EXTENDED-RESULT PIC 9(15). 05 SAFE-RESULT PIC 9(12)V99. 01 FINANCIAL-TEST-DATA. 05 ACCOUNT-BALANCE PIC 9(9)V99 VALUE 9999999.99. 05 TRANSACTION-AMOUNT PIC 9(9)V99 VALUE 8888888.88. 05 NEW-BALANCE PIC 9(9)V99. 05 INTEREST-AMOUNT PIC 9(7)V99. 05 COMPOUNDED-BALANCE PIC 9(11)V99. 01 STATISTICAL-DATA. 05 DATA-POINTS OCCURS 10 TIMES. 10 DATA-VALUE PIC 9(6). 10 SQUARED-VALUE PIC 9(12). 10 CUBED-VALUE PIC 9(18). 05 SUM-OF-SQUARES PIC 9(15). 05 SUM-OF-CUBES PIC 9(20). 01 ERROR-LOGGING. 05 ERROR-MESSAGES OCCURS 50 TIMES. 10 ERROR-TIMESTAMP PIC X(20). 10 ERROR-OPERATION PIC X(20). 10 ERROR-VALUES PIC X(50). 05 ERROR-MESSAGE-COUNT PIC 9(3) VALUE 0. PROCEDURE DIVISION. MAIN-OVERFLOW-DEMO. DISPLAY "=== COBOL OVERFLOW DEMONSTRATION ===" PERFORM INITIALIZE-OVERFLOW-DEMO PERFORM DEMONSTRATE-BASIC-OVERFLOW PERFORM DEMONSTRATE-FINANCIAL-OVERFLOW PERFORM DEMONSTRATE-STATISTICAL-OVERFLOW PERFORM DEMONSTRATE-RECOVERY-STRATEGIES PERFORM DISPLAY-OVERFLOW-STATISTICS DISPLAY "=== OVERFLOW DEMO COMPLETE ===" STOP RUN. INITIALIZE-OVERFLOW-DEMO. DISPLAY "Initializing overflow demonstration..." MOVE 0 TO OVERFLOW-COUNT MOVE 0 TO SUCCESSFUL-OPERATIONS MOVE 0 TO TOTAL-OPERATIONS MOVE 0 TO ERROR-MESSAGE-COUNT *> Initialize test data PERFORM VARYING DEMO-COUNTER FROM 1 BY 1 UNTIL DEMO-COUNTER > 10 COMPUTE DATA-VALUE(DEMO-COUNTER) = DEMO-COUNTER * 1000 END-PERFORM DISPLAY "✅ Demonstration initialized". DEMONSTRATE-BASIC-OVERFLOW. DISPLAY " " DISPLAY "=== BASIC OVERFLOW DEMONSTRATION ===" *> Test addition overflow DISPLAY "Testing addition overflow..." ADD 1 TO TOTAL-OPERATIONS ADD LARGE-NUMBER-1 TO LARGE-NUMBER-2 GIVING RESULT-FIELD ON OVERFLOW DISPLAY " ⚠️ Addition overflow detected" DISPLAY " " LARGE-NUMBER-1 " + " LARGE-NUMBER-2 " > " "999999999" ADD 1 TO OVERFLOW-COUNT PERFORM LOG-OVERFLOW-ERROR WITH "ADDITION" LARGE-NUMBER-1 LARGE-NUMBER-2 NOT ON OVERFLOW DISPLAY " ✅ Addition successful: " RESULT-FIELD ADD 1 TO SUCCESSFUL-OPERATIONS END-ADD *> Test multiplication overflow DISPLAY "Testing multiplication overflow..." ADD 1 TO TOTAL-OPERATIONS MULTIPLY 99999 BY 99999 GIVING RESULT-FIELD ON OVERFLOW DISPLAY " ⚠️ Multiplication overflow detected" DISPLAY " 99999 × 99999 exceeds field capacity" ADD 1 TO OVERFLOW-COUNT PERFORM LOG-OVERFLOW-ERROR WITH "MULTIPLY" 99999 99999 NOT ON OVERFLOW DISPLAY " ✅ Multiplication successful: " RESULT-FIELD ADD 1 TO SUCCESSFUL-OPERATIONS END-MULTIPLY *> Test safe calculation with larger field DISPLAY "Testing safe calculation with extended field..." ADD 1 TO TOTAL-OPERATIONS MULTIPLY 99999 BY 99999 GIVING EXTENDED-RESULT ON OVERFLOW DISPLAY " ⚠️ Even extended field overflowed" ADD 1 TO OVERFLOW-COUNT NOT ON OVERFLOW DISPLAY " ✅ Extended field calculation: " EXTENDED-RESULT ADD 1 TO SUCCESSFUL-OPERATIONS END-MULTIPLY. DEMONSTRATE-FINANCIAL-OVERFLOW. DISPLAY " " DISPLAY "=== FINANCIAL OVERFLOW DEMONSTRATION ===" *> Test account balance overflow DISPLAY "Testing account balance calculations..." ADD 1 TO TOTAL-OPERATIONS ADD TRANSACTION-AMOUNT TO ACCOUNT-BALANCE GIVING NEW-BALANCE ON OVERFLOW DISPLAY " ⚠️ Account balance overflow" DISPLAY " Current: $" ACCOUNT-BALANCE DISPLAY " Transaction: $" TRANSACTION-AMOUNT DISPLAY " Exceeds maximum account limit" ADD 1 TO OVERFLOW-COUNT PERFORM HANDLE-ACCOUNT-OVERFLOW NOT ON OVERFLOW DISPLAY " ✅ New account balance: $" NEW-BALANCE ADD 1 TO SUCCESSFUL-OPERATIONS END-ADD *> Test interest calculation DISPLAY "Testing interest calculation..." ADD 1 TO TOTAL-OPERATIONS COMPUTE INTEREST-AMOUNT = ACCOUNT-BALANCE * 0.15 ON SIZE ERROR DISPLAY " ⚠️ Interest calculation size error" ADD 1 TO OVERFLOW-COUNT PERFORM LOG-OVERFLOW-ERROR WITH "INTEREST" ACCOUNT-BALANCE 15 NOT ON SIZE ERROR ADD INTEREST-AMOUNT TO ACCOUNT-BALANCE GIVING COMPOUNDED-BALANCE ON OVERFLOW DISPLAY " ⚠️ Compound balance overflow" ADD 1 TO OVERFLOW-COUNT NOT ON OVERFLOW DISPLAY " ✅ Interest calculated: $" INTEREST-AMOUNT DISPLAY " ✅ Compounded balance: $" COMPOUNDED-BALANCE ADD 1 TO SUCCESSFUL-OPERATIONS END-ADD END-COMPUTE. DEMONSTRATE-STATISTICAL-OVERFLOW. DISPLAY " " DISPLAY "=== STATISTICAL OVERFLOW DEMONSTRATION ===" *> Calculate squares and cubes with overflow detection PERFORM VARYING DEMO-COUNTER FROM 1 BY 1 UNTIL DEMO-COUNTER > 10 ADD 1 TO TOTAL-OPERATIONS *> Calculate square MULTIPLY DATA-VALUE(DEMO-COUNTER) BY DATA-VALUE(DEMO-COUNTER) GIVING SQUARED-VALUE(DEMO-COUNTER) ON OVERFLOW DISPLAY " ⚠️ Square calculation overflow for value " DATA-VALUE(DEMO-COUNTER) ADD 1 TO OVERFLOW-COUNT MOVE 999999999999 TO SQUARED-VALUE(DEMO-COUNTER) NOT ON OVERFLOW ADD 1 TO SUCCESSFUL-OPERATIONS END-MULTIPLY *> Calculate cube ADD 1 TO TOTAL-OPERATIONS MULTIPLY SQUARED-VALUE(DEMO-COUNTER) BY DATA-VALUE(DEMO-COUNTER) GIVING CUBED-VALUE(DEMO-COUNTER) ON OVERFLOW DISPLAY " ⚠️ Cube calculation overflow for value " DATA-VALUE(DEMO-COUNTER) ADD 1 TO OVERFLOW-COUNT MOVE 999999999999999999 TO CUBED-VALUE(DEMO-COUNTER) NOT ON OVERFLOW ADD 1 TO SUCCESSFUL-OPERATIONS END-MULTIPLY END-PERFORM *> Sum calculations with overflow protection DISPLAY "Calculating statistical sums..." MOVE 0 TO SUM-OF-SQUARES MOVE 0 TO SUM-OF-CUBES PERFORM VARYING DEMO-COUNTER FROM 1 BY 1 UNTIL DEMO-COUNTER > 10 ADD 1 TO TOTAL-OPERATIONS ADD SQUARED-VALUE(DEMO-COUNTER) TO SUM-OF-SQUARES ON OVERFLOW DISPLAY " ⚠️ Sum of squares overflow" ADD 1 TO OVERFLOW-COUNT NOT ON OVERFLOW ADD 1 TO SUCCESSFUL-OPERATIONS END-ADD ADD 1 TO TOTAL-OPERATIONS ADD CUBED-VALUE(DEMO-COUNTER) TO SUM-OF-CUBES ON OVERFLOW DISPLAY " ⚠️ Sum of cubes overflow" ADD 1 TO OVERFLOW-COUNT NOT ON OVERFLOW ADD 1 TO SUCCESSFUL-OPERATIONS END-ADD END-PERFORM IF OVERFLOW-COUNT = 0 DISPLAY " ✅ All statistical calculations completed successfully" DISPLAY " Sum of squares: " SUM-OF-SQUARES DISPLAY " Sum of cubes: " SUM-OF-CUBES END-IF. DEMONSTRATE-RECOVERY-STRATEGIES. DISPLAY " " DISPLAY "=== OVERFLOW RECOVERY STRATEGIES ===" *> Strategy 1: Use larger intermediate fields DISPLAY "Strategy 1: Using larger intermediate fields" COMPUTE WS-LARGE-INTERMEDIATE = LARGE-NUMBER-1 * LARGE-NUMBER-2 DISPLAY " Result in large field: " WS-LARGE-INTERMEDIATE *> Strategy 2: Break down complex calculations DISPLAY "Strategy 2: Breaking down calculations" DIVIDE LARGE-NUMBER-1 BY 2 GIVING WS-HALF-VALUE MULTIPLY WS-HALF-VALUE BY LARGE-NUMBER-2 GIVING WS-TEMP-RESULT MULTIPLY WS-TEMP-RESULT BY 2 GIVING WS-FINAL-RESULT ON OVERFLOW DISPLAY " Even breakdown strategy overflowed" NOT ON OVERFLOW DISPLAY " Breakdown result: " WS-FINAL-RESULT END-MULTIPLY *> Strategy 3: Use floating point for very large numbers DISPLAY "Strategy 3: Alternative precision handling" DISPLAY " Consider using COMP-1 or COMP-2 for very large numbers" DISPLAY " Or implement custom scaling algorithms". HANDLE-ACCOUNT-OVERFLOW. DISPLAY " 🏦 Account overflow handling activated" DISPLAY " 📋 Options:" DISPLAY " • Split transaction into multiple parts" DISPLAY " • Use high-value account type" DISPLAY " • Flag for manual review" DISPLAY " ✅ Account flagged for special handling". LOG-OVERFLOW-ERROR. USING OPERATION VALUE1 VALUE2. ADD 1 TO ERROR-MESSAGE-COUNT IF ERROR-MESSAGE-COUNT <= 50 MOVE FUNCTION CURRENT-DATE TO ERROR-TIMESTAMP(ERROR-MESSAGE-COUNT) MOVE OPERATION TO ERROR-OPERATION(ERROR-MESSAGE-COUNT) STRING VALUE1 " and " VALUE2 DELIMITED BY SIZE INTO ERROR-VALUES(ERROR-MESSAGE-COUNT) DISPLAY " 📝 Error logged: " OPERATION " overflow at " FUNCTION CURRENT-DATE(9:6) ELSE DISPLAY " ⚠️ Error log full - overflow not logged" END-IF. DISPLAY-OVERFLOW-STATISTICS. DISPLAY " " DISPLAY "📊 OVERFLOW DEMONSTRATION STATISTICS" DISPLAY "=====================================" DISPLAY "Total operations attempted: " TOTAL-OPERATIONS DISPLAY "Successful operations: " SUCCESSFUL-OPERATIONS DISPLAY "Overflow conditions detected: " OVERFLOW-COUNT DISPLAY "Error messages logged: " ERROR-MESSAGE-COUNT IF TOTAL-OPERATIONS > 0 COMPUTE WS-SUCCESS-RATE = (SUCCESSFUL-OPERATIONS / TOTAL-OPERATIONS) * 100 DISPLAY "Success rate: " WS-SUCCESS-RATE "%" END-IF DISPLAY " " DISPLAY "🎯 Key OVERFLOW Features Demonstrated:" DISPLAY " • ON OVERFLOW clause usage" DISPLAY " • NOT ON OVERFLOW processing" DISPLAY " • Error detection and logging" DISPLAY " • Recovery strategy implementation" DISPLAY " • Large number handling" DISPLAY " • Financial calculation protection" DISPLAY " " DISPLAY "💡 Best Practices Applied:" DISPLAY " • Always check for overflow in critical calculations" DISPLAY " • Use appropriately sized fields" DISPLAY " • Implement recovery strategies" DISPLAY " • Log overflow conditions for analysis" DISPLAY " • Test with boundary values".