##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# frexp

From cppreference.com
< c‎ | numeric‎ | math

Defined in header `<math.h>` |  |
float frexpf( float arg, int* exp ); |  | (since C99)
double frexp( double arg, int* exp ); |  |
long double frexpl( long double arg, int* exp ); |  | (since C99)

Decomposes given floating point value `arg` to significand and exponent.

### [edit] Parameters

arg | - | floating point value
exp | - | pointer to integer value to store the exponent to

### [edit] Return value

Significand of the given floating point number in the range of `[0.5; 1)`. The exponent is put into integer value pointed to by `exp`.

### [edit] Example

Run this code

    #include <stdio.h>
    #include <math.h>
    #include <float.h>

    int main(void)
    {
        int exp;
        printf("frexp(1.0,&exp)       = %+f * 2^", frexp(1.0,&exp));
        printf("(%+2d)\n", exp);
        printf("frexp(+0.0,&exp)      = %+f * 2^", frexp(+0.0,&exp));
        printf("(%+2d)\n", exp);
        printf("frexp(-0.0,&exp)      = %+f * 2^", frexp(-0.0,&exp));
        printf("(%+2d)\n", exp);
        printf("frexp(+INFINITY,&exp) = %+f * 2^", frexp(+INFINITY,&exp));
        printf("(%+2d)\n", exp);
        printf("frexp(-INFINITY,&exp) = %+f * 2^", frexp(-INFINITY,&exp));
        printf("(%+2d)\n", exp);
        printf("frexp(NAN,&exp)       = %+f * 2^", frexp(NAN,&exp));
        printf("(%+2d)\n", exp);
        printf("\n");

        printf("frexp(DBL_MIN,&exp) = %+f * 2^", frexp(DBL_MIN,&exp));
        printf("(%+2d)\n", exp);
        printf("frexp(DBL_MAX,&exp) = %+f * 2^", frexp(DBL_MAX,&exp));
        printf("(%+2d)\n", exp);

        return 0;
    }

Possible output:

    frexp(1.0,&exp)       = +0.500000 * 2^(+1)
    frexp(+0.0,&exp)      = +0.000000 * 2^(+0)
    frexp(-0.0,&exp)      = -0.000000 * 2^(+0)
    frexp(+INFINITY,&exp) = +inf * 2^(+0)
    frexp(-INFINITY,&exp) = -inf * 2^(+0)
    frexp(NAN,&exp)       = +nan * 2^(+0)

    frexp(DBL_MIN,&exp) = +0.500000 * 2^(-1021)
    frexp(DBL_MAX,&exp) = +1.000000 * 2^(+1024)

### [edit] See also

ldexp ldexpf ldexpl (C99)(C99) | multiplies a number by 2 raised to a power (function) [edit]
logb logbf logbl (C99)(C99)(C99) | extracts exponent of the given number (function) [edit]
ilogb ilogbf ilogbl (C99)(C99)(C99) | extracts exponent of the given number (function) [edit]
modf modff modfl (C99)(C99) | breaks a number into integer and fractional parts (function) [edit]
C++ documentation for frexp

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/numeric/math/frexp&oldid=70142"