У меня есть вопрос, который возник из другого вопроса о точности чисел с плавающей запятой.
Теперь я знаю, что числа с плавающей запятой не всегда могут быть точно представлены, и поэтому они хранятся как ближайшее возможное число с плавающей запятой, которое может быть представлено.
Мой вопрос на самом деле о разнице в представлении float
и double
.
Откуда возникает этот вопрос?
Предположим, я делаю:
System.out.println(.475d+.075d);
тогда вывод будет не 0.55
, а 0.549999
(на моей машине)
Однако, когда я делаю:
System.out.println(.475f+.075f);
Я получаю правильный ответ, т.е. 0.55
(немного неожиданно для меня)
До сих пор у меня сложилось впечатление, что double
имеет большую точность (двойное число будет более точным вплоть до большего количества знаков после запятой), чем float
. Таким образом, если двойное число не может быть точно представлено, то его эквивалентное представление с плавающей запятой также будет храниться неточно.
Однако результаты, которые я получил, немного тревожат меня. Я смущен, если:
- Я неправильно понимаю, что означает
precision
? float
иdouble
представлены по-разному, кроме того факта, что у double больше бит?