1) The value in memory is double precision, but is being printed as float.
^^^ I think that's it...
Well, as far as I can tell you have not confirmed that this is the case.
If t1 in your code snippet was a float, then your output would be exactly as expected.
What happens if you replace
with
?