Node:Normalization Functions,
Next:Rounding Functions,
Previous:Absolute Value,
Up:Arithmetic Functions
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.
All these functions are declared in math.h.
| double frexp (double value, int *exponent)
 | 
Function | 
| 
 | 
| float frexpf (float value, int *exponent)
 | 
Function | 
| 
 | 
| long double frexpl (long double value, int *exponent)
 | 
Function | 
| 
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) returns 0.8 and
stores 4 in exponent.
 If value is zero, then the return value is zero and
zero is stored in *exponent. 
  | 
| double ldexp (double value, int exponent)
 | 
Function | 
| 
 | 
| float ldexpf (float value, int exponent)
 | 
Function | 
| 
 | 
| long double ldexpl (long double value, int exponent)
 | 
Function | 
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.
| double scalb (double value, int exponent)
 | 
Function | 
| 
 | 
| float scalbf (float value, int exponent)
 | 
Function | 
| 
 | 
| long double scalbl (long double value, int exponent)
 | 
Function | 
The scalb function is the BSD name for ldexp. 
 | 
| long long int scalbn (double x, int n)
 | 
Function | 
| 
 | 
| long long int scalbnf (float x, int n)
 | 
Function | 
| 
 | 
| long long int scalbnl (long double x, int n)
 | 
Function | 
scalbn is identical to scalb, except that the exponent
n is an int instead of a floating-point number. 
 | 
| long long int scalbln (double x, long int n)
 | 
Function | 
| 
 | 
| long long int scalblnf (float x, long int n)
 | 
Function | 
| 
 | 
| long long int scalblnl (long double x, long int n)
 | 
Function | 
scalbln is identical to scalb, except that the exponent
n is a long int instead of a floating-point number. 
 | 
| long long int significand (double x)
 | 
Function | 
| 
 | 
| long long int significandf (float x)
 | 
Function | 
| 
 | 
| long long int significandl (long double x)
 | 
Function | 
significand returns the mantissa of x scaled to the range
[1, 2). 
It is equivalent to scalb (x, (double) -ilogb (x)).
This function exists mainly for use in certain standardized tests
of IEEE 754 conformance. 
  |