Splits a real number into a mantissa and exponent #include <math.h> double frexp ( double x , int *exp ); float frexpf ( float x , int *exp ); (C99) long double frexpl ( long double x , int *exp ); (C99) The frexp( ) function expresses a floating-point number x as a normalized fraction f and an integer exponent e to base 2. In other words, if the fraction f is the return value of frexp(x, &e), then x = f x 2e and 0.5 f < 1. The normalized fraction is the return value of the frexp( ) function. The function places the other part of its "answer," the exponent, in the location addressed by the pointer argument. If the floating-point argument x is equal to 0, then the function stores the value 0 at the exponent location and returns 0. Exampledouble fourthrt( double x ) { int exponent, exp_mod_4; double mantissa = frexp( x, &exponent ); exp_mod_4 = exponent % 4; exponent -= ( exp_mod_4 ); // Get an exponent that's divisible by four ... for ( int i = abs( exp_mod_4 ); i > 0; i- ) { if ( exp_mod_4 > 0 ) // ... and compensate in the mantissa. mantissa *= 2.0; else mantissa /= 2.0; } return ldexp( sqrt( sqrt( mantissa )), exponent / 4 ); } See AlsoThe ldexp( ) function, which performs the reverse calculation. |