Давайте перейдем к моему вопросу:
Число 0,20000000000000029 в двойной точности
0011111111001001100110011001100110011001100110011001100110100100
Это действительно номер
0,20000000000000028865798640254070051014423370361328125
Аналогично
число 0,3213213214213222219 в двойной точности 0011111111010100100100001000011101001101110000001100010111111001
На самом деле это номер 0.321321321421322247946505967775010503828525543212890625
Теперь давайте посмотрим на Java-код и выходные данные ниже.
Код: Выделить всё
class Main {
public static void main(String[] args) {
double x = 0.2000000000000002900; //
double y = 0.3213213214213222219; //
System.out.printf("x = %.20f , y = %.20f%n", x, y);
}
}
x = 0.20000000000000030000 , y = 0.32132132142132225000
Отсюда мы понимаем, что выходное число x = 0.20000000000000030000 — это число 0,20000000000000002 8865798640254070051014423370361328125 округляется до 16 цифр.
выходное число y = 0,32132132142132225000 – это число. 0.321321321421322247946505967775010503828525543212890625 округлено до 17 цифр.
Вот вопрос: почему одно из чисел было округлено до 16 с точностью до 17, а другое - до 17? Почему они оба не имеют точности 16? Или почему они оба не имеют точности 17?
почему точность разная?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -specifier
Мобильная версия