Manipulating IEEE754 32bit floats (incl mapping 64bit double)

robtillaart:

    return fl.p.s * INFINITY;

Wouldn't this return 0 or -INFINITY in the case of overflow? Perhaps:

  return (fl.p.s) ? -INFINITY : INFINITY;
Another way to do the infinity sign is to use an array:
float IEEE_POW2x(float number, int n)
{
    static float float_infinity[2] = { INFINITY, -INFINITY };
    _FLOATCONV fl;
    fl.f = number;
    int e = fl.p.e + n;
    if (e >= 0 && e < 256)
    {
        fl.p.e = e;
        return fl.f;
    }
    return float_infinity[fl.p.s];
}