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.
All these functions are declared in math.h.
— Function: float frexpf (float value, int *exponent)
— Function: long double frexpl (long double value, int *exponent)
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 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.For example,
frexp (12.8, &exponent)
returns0.8
and stores4
inexponent
.If value is zero, then the return value is zero and zero is stored in
*
exponent.
— Function: float ldexpf (float value, int exponent)
— Function: long double ldexpl (long double value, int exponent)
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)
returns12.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.
— Function: float scalbf (float value, int exponent)
— Function: long double scalbl (long double value, int exponent)
The
scalb
function is the BSD name forldexp
.
— Function: long long int scalbnf (float x, int n)
— Function: long long int scalbnl (long double x, int n)
scalbn
is identical toscalb
, except that the exponent n is anint
instead of a floating-point number.
— Function: long long int scalblnf (float x, long int n)
— Function: long long int scalblnl (long double x, long int n)
scalbln
is identical toscalb
, except that the exponent n is along int
instead of a floating-point number.
— Function: long long int significandf (float x)
— Function: long long int significandl (long double x)
significand
returns the mantissa of x scaled to the range [1, 2). It is equivalent toscalb (
x, (double) -ilogb (
x))
.This function exists mainly for use in certain standardized tests of IEEE 754 conformance.