Unions
Hi Shraddhan,
The example _should_ work so I suspect an error in DICE.
Check out the following program (compiled with the GNU-compiler) and its
output:
#include <stdio.h>
union DoubleFloat
{
double dp;
long li[2];
};
union DoubleFloat df1;
int main (void)
{
printf ("sizeof (df1) : %2d address of df1 : %08p\n"
"sizeof (df1.dp): %2d address of df1.dp : %08p\n"
"sizeof (df1.li): %2d address of df1.li[0]: %08p\n"
" address of df1.li[1]: %08p\n",
sizeof (df1), &df1,
sizeof (df1.dp), &df1.dp,
sizeof (df1.li), &df1.li[0], &df1.li[1]);
df1.dp = 1.0;
printf ("%lf => %08lx %08lx\n", df1.dp, df1.li[0], df1.li[1]);
df1.li[0] = 0x3ff80000;
df1.li[1] = 0x00000000;
printf ("%08lx %08lx => %lf\n", df1.li[0], df1.li[1], df1.dp);
}
And the output:
sizeof (df1) : 8 address of df1 : 0x7d40ff4
sizeof (df1.dp): 8 address of df1.dp : 0x7d40ff4
sizeof (df1.li): 8 address of df1.li[0]: 0x7d40ff4
address of df1.li[1]: 0x7d40ff8
1.000000 => 3ff00000 00000000
3ff80000 00000000 => 1.500000
Which is the correct output (and the output you expect).
Hope this helps,
— Freddy