2.94 Float Twice
★★★
/* Compute 2*f. If f is NaN, then return f. */
float_bits float_twice(float_bits f);typedef unsigned float_bits;
float_bits float_twice(float_bits f) {
unsigned sign = f >> 31;
unsigned exp = f >> 23 & 0xFF;
unsigned frac = f & 0x7FFFFF;
int is_nan_oo = (exp == 0xFF);
if (is_nan_oo) {
return f;
}
if (exp == 0xFF-1) {
frac = 0;
} else if (exp == 0) {
/* Denormalized */
frac <<= 1;
} else {
/* Normalized */
exp += 1;
}
return sign << 31 | exp << 23 | frac;
}Last updated