|
|
|
Defined in header <math.h> | ||
float frexpf(float arg,int*exp); | (1) | (since C99) |
double frexp(double arg,int*exp); | (2) | |
longdouble frexpl(longdouble arg,int*exp); | (3) | (since C99) |
Defined in header <tgmath.h> | ||
#define frexp( arg, exp ) | (4) | (since C99) |
x
into a normalized fraction and an integral power of two.frexpl
is called. Otherwise, ifarg has integer type or the typedouble,frexp
is called. Otherwise,frexpf
is called, respectively.Contents |
arg | - | floating-point value |
exp | - | pointer to integer value to store the exponent to |
Ifarg
is zero, returns zero and stores zero in*exp
.
Otherwise (ifarg
is not zero), if no errors occur, returns the valuex
in the range(-1;-0.5], [0.5; 1)
and stores an integer value in*exp such thatx×2(*exp)
=arg.
If the value to be stored in*exp
is outside the range ofint, the behavior is unspecified.
Ifarg
is not a floating-point number, the behavior is unspecified.
This function is not subject to any errors specified inmath_errhandling
.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
arg
is ±0, it is returned, unmodified, and0
is stored in*exp.arg
is ±∞, it is returned, and an unspecified value is stored in*exp.arg
is NaN, NaN is returned, and an unspecified value is stored in*exp.On a binary system (whereFLT_RADIX is2),frexp
may be implemented as
The functionfrexp
, together with its dual,ldexp, can be used to manipulate the representation of a floating-point number without direct bit manipulations.
#include <float.h>#include <math.h>#include <stdio.h> int main(void){double f=123.45;printf("Given the number %.2f or %a in hex,\n", f, f); double f3;double f2=modf(f,&f3);printf("modf() makes %.0f + %.2f\n", f3, f2); int i; f2= frexp(f,&i);printf("frexp() makes %f * 2^%d\n", f2, i); i=ilogb(f);printf("logb()/ilogb() make %f * %d^%d\n", f/scalbn(1.0, i),FLT_RADIX, i);}
Possible output:
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,modf() makes 123 + 0.45frexp() makes 0.964453 * 2^7logb()/ilogb() make 1.92891 * 2^6
(C99)(C99) | multiplies a number by2 raised to a power (function)[edit] |
(C99)(C99)(C99) | extracts exponent of the given number (function)[edit] |
(C99)(C99)(C99) | extracts exponent of the given number (function)[edit] |
(C99)(C99) | breaks a number into integer and fractional parts (function)[edit] |
C++ documentation forfrexp |