Skip to content
Intrinsic Functions
step 1/5

Reading — step 1 of 5

Learn

~2 min readModular COBOL

Modern COBOL (since COBOL-85, expanded in COBOL-2002 and 2014) has intrinsic functions — built-in functions you call with FUNCTION.

Math

       COMPUTE X = FUNCTION SQRT(16).            *> 4
       COMPUTE X = FUNCTION ABS(-7).             *> 7
       COMPUTE X = FUNCTION MIN(A, B, C).        *> minimum
       COMPUTE X = FUNCTION MAX(A, B, C).        *> maximum
       COMPUTE X = FUNCTION MEAN(A, B, C).       *> arithmetic mean
       COMPUTE X = FUNCTION SUM(A, B, C).
       COMPUTE X = FUNCTION RANDOM.              *> 0..1 float
       COMPUTE X = FUNCTION REM(A, B).           *> remainder of A/B
       COMPUTE X = FUNCTION MOD(A, B).           *> mathematical modulo

Trig

       FUNCTION SIN, COS, TAN, ASIN, ACOS, ATAN, ATAN2(Y, X)
       FUNCTION LOG(X), LOG10(X), EXP(X)

Strings

       FUNCTION LENGTH(S)            *> char count
       FUNCTION UPPER-CASE(S)
       FUNCTION LOWER-CASE(S)
       FUNCTION REVERSE(S)
       FUNCTION TRIM(S)              *> trim leading and trailing spaces
       FUNCTION TRIM(S LEADING)
       FUNCTION TRIM(S TRAILING)
       FUNCTION CONCAT(A, B, C)      *> COBOL-2002+
       FUNCTION SUBSTITUTE(S, OLD, NEW)

Conversion

       FUNCTION NUMVAL("42")             *> 42 (alphanumeric to number)
       FUNCTION NUMVAL-C("$1,234.56")    *> 1234.56 (with edit chars)
       FUNCTION INTEGER(3.7)              *> 3 (integer part)
       FUNCTION ORD("A")                  *> 66 — collation position
       FUNCTION CHAR(65)                  *> "A"

Date / time

       FUNCTION CURRENT-DATE             *> 21-char timestamp
       FUNCTION INTEGER-OF-DATE(20260508) *> days since 1601-01-01
       FUNCTION DATE-OF-INTEGER(150000)   *> reverse
       FUNCTION INTEGER-OF-DAY(2026121)    *> Julian day to integer
       FUNCTION DAY-OF-INTEGER(N)

Example

       01 NAMES.
           05 N PIC 9(3) OCCURS 5 TIMES.
       PROCEDURE DIVISION.
           MOVE 50 TO N(1).
           MOVE 30 TO N(2).
           MOVE 90 TO N(3).
           MOVE 10 TO N(4).
           MOVE 70 TO N(5).

           DISPLAY "max: " FUNCTION MAX(N(1) N(2) N(3) N(4) N(5)).
           DISPLAY "min: " FUNCTION MIN(N(1) N(2) N(3) N(4) N(5)).
           DISPLAY "avg: " FUNCTION MEAN(N(1) N(2) N(3) N(4) N(5)).

Repeating ALL

       FUNCTION SUM(N(ALL))             *> sum entire OCCURS array
       FUNCTION MEAN(N(ALL))
       FUNCTION MAX(N(ALL))

The ALL subscript saves listing every element.

Practical advice

  • Older COBOL (pre-85) doesn't have these — sometimes you'll have to write your own
  • Modern compilers (GnuCOBOL, IBM Enterprise COBOL) all support the standard set
  • For complex math, check the manual — your specific compiler may have extras
  • Avoid FUNCTION RANDOM for security; it's not cryptographically random

Discussion

Ask a question, share an insight, or help someone who’s stuck.

Sign in to post a comment or reply.

Loading…