void show_float(unsigned uf) { float f = u2f(uf); unsigned exp = get_exp(uf); unsigned frac = get_frac(uf); unsigned sign = get_sign(uf); printf("\nFloating point value %.10g\n", f); printf("Bit Representation 0x%.8x, sign = %x, exponent = 0x%.2x, fraction = 0x%.6x\n", uf, sign, exp, frac); if (exp == EXP_MASK) { if (frac == 0) { printf("%cInfinity\n", sign ? '-' : '+'); } else printf("Not-A-Number\n"); } else { int denorm = (exp == 0); int uexp = denorm ? 1-BIAS : exp - BIAS; int mantissa = denorm ? frac : frac + (1<<FRAC_SIZE); float fman = (float) mantissa / (float) (1<<FRAC_SIZE); printf("%s. %c%.10f X 2^(%d)\n", denorm ? "Denormalized" : "Normalized", sign ? '-' : '+', fman, uexp); } }
double FixedPoint::to_double() const { return static_cast<double>(get_int()) + (static_cast<double>(get_frac()) / static_cast<double>(max_frac)); }