function
<cmath> <ctgmath>
frexp
double frexp (double x, int* exp);
double frexp (double x , int* exp);
float frexpf (float x , int* exp);
long double frexpl (long double x, int* exp);
double frexp (double x , int* exp);
float frexp (float x , int* exp);
long double frexp (long double x, int* exp);
double frexp (double x , int* exp);
float frexp (float x , int* exp);
long double frexp (long double x, int* exp);
double frexp (T x , int* exp); // additional overloads for integral types
Get significand and exponent
Breaks the floating point number x into its binary significand (a floating point value between 0.5
(included) and 1.0
(excluded)) and an integral exponent for 2
, such that:
x = significand * 2 exponent
The exponent is stored in the location pointed by exp, and the significand is the value returned by the function.
If x is zero, both parts (significand and exponent) are zero.
Header
<tgmath.h> provides a type-generic macro version of this function.
Additional overloads are provided in this header (
<cmath>
) for the
integral types: These overloads effectively cast
x to a
double
before calculations (defined for
T being any
integral type).
Parameters
- x
- Value to be decomposed.
- exp
- Pointer to an
int
where the value of the exponent is stored.
Return Value
The binary significand of x.
This value is the floating point value in the interval [0.5,1)
which, once multiplied by 2
raised to the power of exp, yields x.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
/* frexp example */
#include <stdio.h> /* printf */
#include <math.h> /* frexp */
int main ()
{
double param, result;
int n;
param = 8.0;
result = frexp (param , &n);
printf ("%f = %f * 2^%d\n", param, result, n);
return 0;
}
|
Output:
8.000000 = 0.500000 * 2^4
|
See also
- ldexp
- Generate value from significand and exponent (function
)
- log
- Compute natural logarithm (function
)
- pow
- Raise to power (function
)