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
%