Floating-point data and intermediate results
If any operation in an arithmetic expression is computed in floating-point arithmetic, the entire expression is computed as if all operands were converted to floating point and the operations were performed using floating-point instructions.
Floating-point instructions are used to compute an arithmetic expression if any of the following conditions is true of the expression:
- A receiver or operand is
COMP-1
,COMP-2
, external floating point, or a floating-point literal. - An exponent contains decimal places.
- An exponent is an expression that contains an exponentiation or division operator, and dmax is greater than zero.
- An intrinsic function is a floating-point function.
In compatibility mode, if an expression is computed in floating-point arithmetic, the precision used to evaluate the arithmetic operations is determined as follows:
- Single precision is used if all receivers and operands are
COMP-1
data items and the expression contains no multiplication or exponentiation operations. - In all other cases, long precision is used.
Whenever long-precision floating point is used for one operation in an arithmetic expression, all operations in the expression are computed as if long floating-point instructions were used.
In extended mode, if an expression is computed in floating-point arithmetic, the precision used to evaluate the arithmetic operations is determined as follows:
- Single precision is used if all receivers and operands are
COMP-1
data items and the expression contains no multiplication or exponentiation operations. - Long precision is used if all receivers and operands are
COMP-1
orCOMP-2
data items, at least one receiver or operand is aCOMP-2
data item, and the expression contains no multiplication or exponentiation operations. - In all other cases, extended precision is used.
Whenever extended-precision floating point is used for one operation in an arithmetic expression, all operations in the expression are computed as if extended-precision floating-point instructions were used.
Alert: If a floating-point operation has an intermediate result field in which exponent overflow occurs, the job is abnormally terminated.
Exponentiations evaluated in floating-point arithmetic
In compatibility mode, floating-point exponentiations are always evaluated using long floating-point arithmetic. In extended mode, floating-point exponentiations are always evaluated using extended-precision floating-point arithmetic.
The value of a negative number raised to a fractional power is undefined in COBOL. For example, (-2) ** 3 is equal to -8, but (-2) ** (3.000001) is undefined. When an exponentiation is evaluated in floating point and there is a possibility that the result is undefined, the exponent is evaluated at run time to determine if it has an integral value. If not, a diagnostic message is issued.
Intrinsic functions evaluated in floating-point arithmetic
In compatibility mode, floating-point intrinsic functions always return a long (64-bit) floating-point value. In extended mode, floating-point intrinsic functions always return an extended-precision (128-bit) floating-point value.
Mixed functions that have at least one floating-point argument are evaluated using floating-point arithmetic.