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