FREXP(3)

NAME
frexp, frexpf, frexpl - convert floating-point number to fractional and integral components

SYNOPSIS
#include <math.h>

double frexp(double x, int *exp);
float frexpf(float x, int *exp);
long double frexpl(long double x, int *exp);

Link with -lm.

DESCRIPTION
The frexp() function is used to split the number x into a normalized fraction and an exponent which is stored in exp.

RETURN VALUE
The frexp() function returns the normalized fraction. If the argument x is not zero, the normalized fraction is x times a power of two, and its absolute value is always in the range 1/2 (inclusive) to 1 (exclusive). If x is zero, then the normalized fraction is zero and zero is stored in exp.

CONFORMING TO
SVID 3, POSIX, 4.3BSD, ISO 9899. The float and the long double variants are C99 requirements.

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

int
main(int argc, char *argv[])
{
    double x, r;
    int exp;

    x = strtod(argv[1], NULL);
    r = frexp(x, &exp);

    printf("frexp(%g, &e) = %g: %g * %d^%d = %g,
		x, r, r, FLT_RADIX, exp, x);
    exit(EXIT_SUCCESS);
} /* main */

This program produces results such as the following:

$ ./a.out 2560 frexp(2560, &e) = 0.625: 0.625 * 2^12 = 2560 $ ./a.out -4 frexp(-4, &e) = -0.5: -0.5 * 2^3 = -4

SEE ALSO
ldexp(3), modf(3)