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];
}