18. Testing frexp() and ldexp()
% cat frexp.c // test frexpf() and ldexpf() // #include <stdio.h> #include <stdlib.h> #include <math.h> int main( int argc, char *argv[]) { float v, v2, f, f2; int e, e2; for( int i = 1; i < argc; ++i) { v = atof(argv[i]); f = frexpf( v, &e); printf( "\n v = %g = %g x 2^%i\n", v, f, e); v2 = ldexpf( f, e+1); f2 = frexpf( v2, &e2); printf( "v*2 = %g = %g x 2^%i\n", v2, f2, e2); v2 = ldexpf( f, e-1); f2 = frexpf( v2, &e2); printf( "v/2 = %g = %g x 2^%i\n", v2, f2, e2); } return 0; } % gcc -std=c99 -pedantic -Wall frexp.c % ./a.out 1 3 3.4028235e+38 1.4012985e-45 v = 1 = 0.5 x 2^1 v*2 = 2 = 0.5 x 2^2 v/2 = 0.5 = 0.5 x 2^0 v = 3 = 0.75 x 2^2 v*2 = 6 = 0.75 x 2^3 v/2 = 1.5 = 0.75 x 2^1 v = 3.40282e+38 = 1 x 2^128 v*2 = inf = inf x 2^0 v/2 = 1.70141e+38 = 1 x 2^127 v = 1.4013e-45 = 0.5 x 2^-148 v*2 = 2.8026e-45 = 0.5 x 2^-147 v/2 = 0 = 0 x 2^0 %



