I have a program, which is running on two processors, one of which does not have floating point support. So, I need to perform floating point calculations using fixed point in that processor. For that purpose, I will be using a floating point emulation library.
I need to first extract the signs, mantissas and exponents of floating point numbers on the processor which do support floating point. So, my question is how can I get the sign, mantissa and exponent of a single precision floating point number.
Following the format from this figure,
That is what I've done so far, but except sign, neither mantissa and exponent are correct. I think, I'm missing something.
void getSME( int& s, int& m, int& e, float number )
{
unsigned int* ptr = (unsigned int*)&number;
s = *ptr >> 31;
e = *ptr & 0x7f800000;
e >>= 23;
m = *ptr & 0x007fffff;
}
(union { float f; uint32_t u; }) { number } .u
. This returns auint32_t
that is the bytes of thefloat
number
reinterpreted as a 32-bit unsigned integer. – Eric Postpischil