 # C++ frexp()

The frexp() function in C++ breaks a floating point number into its binary significand.

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.

frexp() return values
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
```