Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer


Gets the mantissa and exponent of a floating-point number.

double frexp(
   double x,
   int *expptr 
float frexp(
   float x,
   int * expptr
);  // C++ only
long double frexp(
   long double x,
   int * expptr
);  // C++ only


Floating-point value.
Pointer to stored integer exponent.

Return Value

frexp returns the mantissa. If x is 0, the function returns 0 for both the mantissa and the exponent. There is no error return.


The frexp function breaks down the floating-point value (x) into a mantissa (m) and an exponent (n), such that the absolute value of m is greater than or equal to 0.5 and less than 1.0, and x = m*2n. The integer exponent n is stored at the location pointed to by expptr.

C++ allows overloading, so you can call overloads of frexp. In a C program, frexp always takes a double and an int and returns a double.


Function Required header Compatibility
frexp <math.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP

For additional compatibility information, see Compatibility in the Introduction.


All versions of the C run-time libraries.


// crt_frexp.c
/* This program calculates frexp( 16.4, &n )
 * then displays y and n.

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

int main( void )
   double x, y;
   int n;

   x = 16.4;
   y = frexp( x, &n );
   printf( "frexp( %f, &n ) = %f, n = %d\n", x, y, n );


frexp( 16.400000, &n ) = 0.512500, n = 5

See Also

Floating-Point Support Routines | ldexp | modf | Run-Time Routines and .NET Framework Equivalents

© 2015 Microsoft