The little-known **frexp** function from the C/C++ standard library can be used to extract the **mantissa** and **exponent** of a floating point number (float, double or long double):

#include <cmath>
const double d = 0.123;
int exponent;
const double mantissa = frexp( d, &exponent );
// Double: 0.123
// Mantissa: 0.984
// Exponent: -3

A few notes:

`frexp`

assumes that a floating point number is represented as `mantissa * 2 ^ exponent`

. This is a simple and convenient representation to work with. But, do keep in mind that this is not how the floating point number is actually stored.
- For a positive floating point number, the mantissa returned by
`frexp`

always lies in the range `[0.5, 1.0)`

. This range is enough since a mantissa in the range `(0.0, 0.5)`

can be converted to a value in `[0.5, 1.0)`

by multiplying it by a suitable `2 ^ exponent`

. Note that the `exponent`

can be negative or positive. The exception to this mantissa value is the floating point number `0.0`

, which is displayed as it is.
- The mantissa and exponent returned by
`frexp`

are in no way related to the actual mantissa and exponent values stored in the floating point number format. For example, the IEEE-754 format uses a sign bit and modifies the exponent value using an exponent bias.

### Like this:

Like Loading...