The binary significand is a floating point whose absolute value (mantissa) lies in the interval [0.5, 1) and an integer exponent for 2.
The function is defined in <cmath> header file.
Mathematically,
x = Binary significand * 2exponent
where, exponent is stored in the location pointed by exp and the Binary significand is the value returned by frexp().
frexp() prototype [As of C++ 11 standard]
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); // For integral type
The frexp() function takes two arguments and returns the binary significand value of type double
, float
or long double
.
frexp() Parameters
- x - The value to be decomposed.
- exp - The pointer to an integer where the value of exponent is to be stored.
frexp() Return value
The frexp() function returns the binary significand whose absolute value lies in the interval [0.5, 1). If x is zero, both significand and exponent are zero.
Parameter (x) | Binary Significand | Exponent |
---|---|---|
0 | 0 | 0 |
x >= 1 | Positive | Positive |
x <= -1 | Negative | Positive |
-1 < x < 0 | Negative | Negative |
0 < x < 1 | Positive | Negative |
Example 1: How frexp() function works in C++?
#include <iostream>
#include <cmath>
using namespace std;
int main ()
{
double x = 6.81, significand;
int *exp;
significand = frexp(x , exp);
cout << x << " = " << significand << " * 2^" << *exp << endl;
return 0;
}
When you run the program, the output will be:
6.81 = 0.85125 * 2^3
Example 2: frexp() function with integral type
#include <iostream>
#include <cmath>
using namespace std;
int main ()
{
double significand;
int *exp, x = 25;
significand = frexp (x , exp);
cout << x << " = " << significand << " * 2^" << *exp << endl;
return 0;
}
When you run the program, the output will be:
25 = 0.78125 * 2^5