float and 1's

  • Thread starter Vijay Kumar R Zanvar
  • Start date
V

Vijay Kumar R Zanvar

Hi,
Just like counting the number of bits set to
1 in an integral variable, can we count the same
in a float?

I have two solutions in my mind:

1.
union {
float f;
int i;
}u = { 10 };

Now, count the required number from u.i.
Will this work?


2.
float f;
unsigned char uc[sizeof (float)];

memcpy ( uc, &f, sizeof (float) );

Now count from the array. How about this?


Season's Greetings!
 
L

lallous

Vijay Kumar R Zanvar said:
Hi,
Just like counting the number of bits set to
1 in an integral variable, can we count the same
in a float?

I have two solutions in my mind:

1.
union {
float f;
int i;
}u = { 10 };

Now, count the required number from u.i.
Will this work?


2.
float f;
unsigned char uc[sizeof (float)];

memcpy ( uc, &f, sizeof (float) );

Now count from the array. How about this?


Season's Greetings!
Hello,

It is enough to declare the float then take a char* to it as:
float f;
char *p = &f;
// now do the bit counting in 'p' till sizeof(f) , making at most
sizeof(f)*8 bits
 
T

Thomas Stegen

lallous said:
Hello,

It is enough to declare the float then take a char* to it as:
float f;
char *p = &f;

You need an explicit cast here. And it should be unsigned char*
probably.

unsigned char *p = (unsigned char *)&f;
// now do the bit counting in 'p' till sizeof(f) , making at most
sizeof(f)*8 bits

Note that this will also count any padding bits if there are any.
 
K

Keith Thompson

Vijay Kumar R Zanvar said:
Just like counting the number of bits set to
1 in an integral variable, can we count the same
in a float?

I have two solutions in my mind:

1.
union {
float f;
int i;
}u = { 10 };

Now, count the required number from u.i.
Will this work?

Not reliably. Note that float and int may or may not be the same
size. (As a matter of style, I'd use "10.0", or even "10.0f", rather
than "10" in the initialization to make it clear that you're
initializing the float member.)
2.
float f;
unsigned char uc[sizeof (float)];

memcpy ( uc, &f, sizeof (float) );

Now count from the array. How about this?

Yes, that should work, though others have pointed out that you don't
really need to copy f to an array.

BTW, I can't think of any use for the number of 1 bits in a float
other than idle curiosity -- not that there's anything wrong with idle
curiosity.
 
J

Jack Klein

Vijay Kumar R Zanvar said:
Hi,
Just like counting the number of bits set to
1 in an integral variable, can we count the same
in a float?

I have two solutions in my mind:

1.
union {
float f;
int i;
}u = { 10 };

Now, count the required number from u.i.
Will this work?


2.
float f;
unsigned char uc[sizeof (float)];

memcpy ( uc, &f, sizeof (float) );

Now count from the array. How about this?


Season's Greetings!
Hello,

It is enough to declare the float then take a char* to it as:
float f;
char *p = &f;
// now do the bit counting in 'p' till sizeof(f) , making at most
sizeof(f)*8 bits

Aside from what others have said, your very last sentence is
completely wrong. I am working on a platform right now where CHAR_BIT
is 16. sizeof(float) is 2, and a float contains 32 bits.

It is definitely possible for the binary representation of a float to
have more than sizeof(float)*8 1 bits. In fact it could have as many
as sizeof(float)*16 1 bits.

But it will never, ever have more than sizeof(float)*CHAR_BIT 1 bits.

--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++ ftp://snurse-l.org/pub/acllc-c++/faq
 
V

Vijay Kumar R Zanvar

[..]
BTW, I can't think of any use for the number of 1 bits in a float
other than idle curiosity -- not that there's anything wrong with idle
curiosity.

You are right. It was only my curiosity.

Thanks
vijay-z.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,025
Latest member
KetoRushACVFitness

Latest Threads

Top