#include <stdio.h>
union NumericType
{
float value;
int intvalue;
}Values;
int main()
{
Values.value = 1094795585.00;
printf("%f \n",Values.value);
return 0;
}
This program outputs as :
1094795648.000000
Can anybody explain Why is this happening? Why did the value of the float Values.value increase? Or am I missing something here?
First off, this has nothing whatsoever to do with the use of a
union.Now, suppose you write:
what will happen?
1.5is not an integer value, so it gets converted to an integer (by truncation) andxso actually gets the value1, which is exactly what is printed.The exact same thing is happening in your example.
1094795585.0is not representable as a single precision floating-point number, so it gets converted to a representable value. This happens via rounding. The two closest values are:Because your number is slightly closer to the larger value (this is somewhat easier to see if you look at the hexadecimal representation), it rounds to that value, so that is the value stored in
x, and that is the value that is printed.