/***********2.91*************/
/*Compute |f|. If f is NaN, then return f.*/
float_bits float_absval(float_bits f)
{
unsigned sign = f >> 31;
unsigned exp = (f >> 23) & 0xFF;
unsigned frac = f &0x7FFFFF;
if(exp == 255 && frac)
{
return (sign << 31) | (exp << 23) | frac;
}
return (exp << 23) | frac;
}
/*************2.92***************/
/*Compute -f. If f is NaN, then return f. */
float_bits float_negate(float_bits f)
{
unsigned sign = f >> 31;
unsigned exp = (f >> 23) & 0xFF;
unsigned frac = f & 0x7FFFFF;
if(exp == 0xFF && frac)
{
return f;
}
return ((~sign & 1) << 31) | (exp << 23) | frac;
}
/************2.93***************/
/*Compute 0.5*f. If f is