これが私が試したものです:
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
ここでは明らかに間違った値です。