×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

how do I use a union and bit fields ?

how do I use a union and bit fields ?

how do I use a union and bit fields ?

(OP)
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);
}
/////////////////////////////////////////////

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources