20.8.2 Normalization Functions

The functions described in this section are primarily provided as a way
to efficiently perform certain low-level manipulations on floating point
numbers that are represented internally using a binary radix;
see Floating Point Concepts. These functions are required to
have equivalent behavior even if the representation does not use a radix
of 2, but of course they are unlikely to be particularly efficient in
those cases.

These functions are used to split the number value
into a normalized fraction and an exponent.

If the argument value is not zero, the return value is value
times a power of two, and its magnitude is always in the range 1/2
(inclusive) to 1 (exclusive). The corresponding exponent is stored in
*exponent; the return value multiplied by 2 raised to this
exponent equals the original number value.

These functions return the result of multiplying the floating-point
number value by 2 raised to the power exponent. (It can
be used to reassemble floating-point numbers that were taken apart
by frexp.)

For example, ldexp (0.8, 4) returns 12.8.

The following functions, which come from BSD, provide facilities
equivalent to those of ldexp and frexp. See also the
ISO C function logb which originally also appeared in BSD.