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
%