# Numbers

The numeric data types are integer, decimal, floating-point, and decimal floating-point.

- Exact numerics: integer and decimal
- Decimal floating-point
- Approximate numerics: floating-point

Integer includes small integer, large integer, and big integer. Integer numbers are exact representations of integers. Decimal numbers are exact representations of numbers with a fixed precision and scale. Integer and decimal numbers are considered exact numeric types.

Decimal floating-point numbers can have a precision of 16 or 34. Decimal floating-point supports both exact representations of real numbers and approximation of real numbers and so is not considered either an exact numeric type or an approximate numeric type.

Floating-point includes single precision and double precision. Floating-point numbers are approximations of real numbers and are considered approximate numeric types.

All
numbers have a *sign*, a *precision*, and a *scale*.
For all numbers except decimal floating-point, if a column value is
zero, the sign is positive. Decimal floating-point numbers include
negative and positive zeros. Decimal floating-point has distinct values
for a number and the same number with various exponents (for example:
0.0, 0.00, 0.0E5, 1.0, 1.00, 1.0000). The precision is the total number
of decimal digits, excluding the sign. The scale is the total number
of decimal digits to the right of the decimal point. If there is no
decimal point, the scale is zero.

See also the data type section in the description of CREATE TABLE statement and CREATE TABLE (HADOOP) statement.

## Small integer (SMALLINT)

A *small integer* is
a two-byte integer with a precision of 5 digits. The range of small
integers is -32 768 to 32 767.

## Large integer (INTEGER)

A *large integer* is
a four-byte integer with a precision of 10 digits. The range of large
integers is -2 147 483 648 to +2 147 483 647.

## Big integer (BIGINT)

A *big integer* is
an eight-byte integer with a precision of 19 digits. The range of
big integers is -9 223 372 036 854 775 808 to +9 223 372 036 854 775 807.

## Decimal (DECIMAL or NUMERIC)

A *decimal* value
is a packed decimal number with an implicit decimal point. The position
of the decimal point is determined by the precision and the scale
of the number. The scale, which is the number of digits in the fractional
part of the number, cannot be negative or greater than the precision.
The maximum precision is 31 digits.

All values in a decimal
column have the same precision and scale. The range of a decimal variable
or the numbers in a decimal column is -n to
+n, where the absolute value of n is
the largest number that can be represented with the applicable precision
and scale. The maximum range is -10^{31}+1 to 10^{31}-1.

## Single-precision floating-point (REAL)

A *single-precision
floating-point* number is a 32-bit approximation of a real number.
The number can be zero or can range from -3.4028234663852886e+38 to
-1.1754943508222875e-38, or from 1.1754943508222875e-38 to 3.4028234663852886e+38.

## Double-precision floating-point (DOUBLE or FLOAT)

A *double-precision
floating-point* number is a 64-bit approximation of a real number.
The number can be zero or can range from -1.7976931348623158e+308
to -2.2250738585072014e-308, or from 2.2250738585072014e-308 to 1.7976931348623158e+308.

## Decimal floating-point (DECFLOAT)

A *decimal
floating-point* value is an IEEE 754r number with a decimal point.
The position of the decimal point is stored in each decimal floating-point
value. The maximum precision is 34 digits. The range of a decimal
floating-point number is either 16 or 34 digits of precision, and
an exponent range of 10^{-383} to 10^{+384} or 10^{-6143} to
10^{+6144}, respectively. The minimum exponent, E_{min},
for DECFLOAT values is -383 for DECFLOAT(16) and -6143 for DECFLOAT(34).
The maximum exponent, E_{max}, for DECFLOAT values is 384
for DECFLOAT(16) and 6144 for DECFLOAT(34).

- Infinity - a value that represents a number whose magnitude is infinitely large
- Quiet NaN - a value that represents undefined results and that does not cause an invalid number warning
- Signalling NaN - a value that represents undefined results and that causes an invalid number warning if used in any numeric operation

## Subnormal numbers and underflow

Nonzero
numbers whose adjusted exponents are less than E_{min} are
called subnormal numbers. These subnormal numbers are accepted as
operands for all operations and can result from any operation.

For
a subnormal result, the minimum values of the exponent become E_{min} -
(precision-1), called E_{tiny}, where precision is the working
precision. If necessary, the result is rounded to ensure that the
exponent is no smaller than E_{tiny}. If the result becomes
inexact during rounding, an underflow warning is returned. A
subnormal result does not always return the underflow warning.

When
a number underflows to zero during a calculation, its exponent will
be E_{tiny}. The maximum value of the exponent is unaffected.

The maximum value of the exponent for subnormal numbers is the same as the minimum value of the exponent that can arise during operations that do not result in subnormal numbers. This occurs when the length of the coefficient in decimal digits is equal to the precision.