Here is what i tried:
public class LongToDoubleTest{
public static void main(String... args) {
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MAX_VALUE/2);
System.out.println(Math.floor(Long.MAX_VALUE/2));
System.out.println(new Double(Math.floor(Long.MAX_VALUE/2)).longValue());
}
}
Here is the output:
9223372036854775807
4611686018427387903
4.6116860184273879E18
4611686018427387904
I was initially trying to figure out, is it possible to keep half of the Long.MAX_VALUE in double without losing data, So I had a test with all those lines, except the last one. So it appeared that i'm right and last 3
was missing. Then, just to clarify it, I added last line. And not 3
appeared but 4
. So my question is, from where those 4
appeared and why it's 4
and not 3
. Because 4
is actually an incorrect value here.
P.S. I'm very poor in knowledge of IEEE 754
, so maybe behaviour I found is absolutely correct, but 4
is obviously a wrong value here.