Ulrich Eckhardt wrote:
Lars Christian Jensen wrote:

   float f1 = 4.5;
   int i =    *((int*)&f1);
   float f2 = *((float*)&i);

   printf("f1 = %f, i = 0x%08x, f2 = %f\n", f1, i, f2);


You are using stupid, brute force casts to convert between totally
unrelated objects and expect anything useful?

Sorry, but what exactly is your problem? If you wanted to demonstrate that
it is possible to write C++ programs that don't behave consistently (i.e.
show different implementations of 'undefined behaviour'), fine, but we all
knew that already.

Uli


what undefined behavor? if sizeof(int)==sizeof(float) f1==f2 must be bit copied.

to Lars Christian Jensen:
the only reason it could differ, I think is sizeof(int)!=sizeof(float),
I have not been able reproducing the first bahavor (when f2 is 0). Can you please try this (on your's (GCC) 4.0.1 20050727 (Red Hat 4.0.1-5)) and post results:

#include <cstdio>
#include <cstdlib>

int main() {
   float f1 = 4.5f;
   char *i=(char*)malloc(4);
   *((float*)i) = *((float*)&f1);
   float f2 = *((float*)i);

   printf("f1 = %f, f2 = %f\n", f1,  f2);
   free(i);
   return 0;
}

_______________________________________________
Help-gplusplus mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-gplusplus

Reply via email to