I am not sure whether you don't understand unions or numbers. Floats and ints are different. A float is stored in IEEE 754 format:
https://msdn.microsoft.com/en-us/library/0b34tf65.aspx[
^]
To put this another way there is absolutely no correlation between what is stored in memory for a long int and what is stored for a float even if they occupy the same number of bytes. Your assumptions are false.
When you set the long int to 1 so setting the LSB that corresponds to a very small number in IEEE 754.
Test here:
http://www.h-schmidt.net/FloatConverter/IEEE754.html[
^]
It may be more illuminating to do this:
lfu.floatValue = 1.0f;
and see what the long int value is.
If you can't use floats you will have to write your own code to do the task.