Вот что я пробовал:Преобразование Long удвоится в Java, я нашел некоторое несоответствие
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 в два раза без потери данных. Поэтому у меня был тест со всеми этими строками, кроме последнего. Так оказалось, что я прав, и последний 3
пропал без вести. Затем, чтобы уточнить это, я добавил последнюю строку. И не 3
появился, но 4
. Поэтому мой вопрос: откуда появились 4
и почему это 4
, а не 3
. Потому что 4
на самом деле является неправильным значением здесь. P.S. Я очень плохо разбираюсь в IEEE 754
, так что поведение, которое я нашел, абсолютно правильно, но 4
, очевидно, является неправильным значением здесь.
4.6116860184273879 ** E18 ** –