Home

Subnormals

Subnormal numbers, also called denormals, are a class of floating-point values used to represent numbers closer to zero than the smallest normal numbers. In IEEE 754 binary formats, subnormals occur when the exponent field is zero. In this case the hidden leading bit of the significand is zero (not one, as in normal numbers), and the value is sign × (0.fraction) × 2^(1−bias). This allows a continuous underflow from zero up to the smallest normal number, at the cost of reduced precision and possible performance penalties.

For binary32 (single precision), the smallest normal is 2^−126 ≈ 1.17549435 × 10^−38, while the smallest subnormal

Subnormals enable gradual underflow and improve relative accuracy near zero, but arithmetic on them may be

is
2^−149
≈
1.40129846
×
10^−45,
and
the
largest
subnormal
is
(2^−126)
−
2^−149
≈
1.17549421
×
10^−38.
Similar
ranges
exist
for
other
formats,
such
as
binary64
(double
precision),
where
the
smallest
normal
is
2^−1022
and
the
smallest
subnormal
is
2^−1074.
In
general,
a
subnormal
uses
an
exponent
of
zero
with
a
leading
zero
in
the
significand,
extending
the
dynamic
range
toward
zero.
slower
on
some
hardware.
Some
implementations
support
a
flush-to-zero
option,
which
treats
subnormals
as
zero
for
performance,
reducing
precision
near
zero.
Subnormals
are
part
of
the
IEEE
754
standard
and
are
supported
in
most
modern
floating-point
formats,
including
half-precision
and
extended
precisions.
They
help
preserve
a
meaningful
zero
neighborhood
and
enhance
numerical
robustness
in
certain
computations.