Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations cowski on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

how do I use a union and bit fields ?

Status
Not open for further replies.

Guest
Hi, everybody, could you help me to answser my question?

Now I have written a program which uses single precision
floating-point(16-bits). However I need to reduce the precision of this from a 23b mantissa to 11 or 12 bits. So all my operations are programmed out into functions - add (float arg1, float arg2, float &res); sub...; mul...; div...etc. These functions first do the operation expected, then mask off the excess mantissa bits and adjust the rounding. It's for these latter manipulations that I need to get to the bit representation.

My problem now is that I need to take a 32b floating-point value, and then treat it as though it were just a string of bits.
Finally, how do I use a union and some bit fields if I want to access the fields in the number directly.

Here is my code:

/////////////////////////////////////////////
void scale(const float &res)
{
#define f 12
#define m 0x000007FF

unsigned long r, t;
union {
unsigned long s;
float y;};

y = res;
t = (s&m);
s = (s>>(f-1));
r = (s&0x00000001);
s = (s>>1);
if (r==1){
if (t!=0)
s += 1;
else
if ( (s&0x00000001) == 1 )
s += 1;
}
s = (s<<f);
}
/////////////////////////////////////////////

 
Status
Not open for further replies.

Part and Inventory Search

Sponsor