これが私が試したものです:
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());
}
}
出力は次のとおりです。
9223372036854775807
4611686018427387903
4.6116860184273879E18
4611686018427387904
私は最初に、データを失うことなく Long.MAX_VALUE の半分を double に保つことができるかどうかを理解しようとしていました。そのため、最後の行を除くすべての行でテストを行いました。だから、私は正しく、最後の3行方不明だったようです。次に、明確にするために、最後の行を追加しました。そして、3登場しませんでしたが4。だから私の質問は、それらがどこから4現れたのか、そしてなぜそうで4はないのかということ3です。4ここでは、実際には正しくない値であるためです。PS私は の知識が非常に乏しいIEEE 754ので、私が見つけた動作は完全に正しいかもしれませんが、4ここでは明らかに間違った値です。