Node:Normalization Functions, Next:Rounding Functions, Previous:Absolute Value, Up:Arithmetic 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 .
|
ldexp
and frexp
.
double logb (double x) | Function |
float logbf (float x) | Function |
long double logbl (long double x) | Function |
These functions return the integer part of the base-2 logarithm of
x, an integer value represented in type 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 return value is minus infinity if the machine
supports infinities, and a very small number if it does not. If x
is infinity, the return value is infinity.
For finite x, the value returned by logb is one less than
the value that frexp would store into *exponent .
|
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.
|