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'.
frexp function is 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) returns 0.8 and stores 4 in exponent .
If value is zero, then the return value is zero and zero is stored in *exponent .
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 :
scalb function is the BSD name for ldexp .
double . This is the highest integer power of 2 contained in x. The sign of x is ignored. For example, logb (3.5) is 1.0 and logb (4.0) is 2.0 .
When 2 raised to this power is divided into x, it gives a quotient between 1 (inclusive) and 2 (exclusive).
If x is zero, the value is minus infinity (if the machine supports such a value), or else a very small number. If x is infinity, the value is infinity.
The value returned by logb is one less than the value that frexp would store into *exponent .
copysign function returns a value whose absolute value is the same as that of value, and whose sign matches that of sign. This is a BSD function.