Tylko po to, aby podać powód tego, co mówią wszyscy inni.
Binarna reprezentacja pływaka jest trochę denerwująca.
W systemie binarnym większość programistów zna korelację między 1b = 1d, 10b = 2d, 100b = 4d, 1000b = 8d
Cóż, działa też w drugą stronę.
.1b = .5d, .01b = .25d, .001b = .125, ...
Problem polega na tym, że nie ma dokładnego sposobu przedstawienia większości liczb dziesiętnych, takich jak .1, .2, .3 itd. Wszystko, co możesz zrobić, to przybliżenie w systemie dwójkowym. System trochę zaokrągla, gdy drukowane są liczby, tak że wyświetla .1 zamiast .10000000000001 lub .999999999999 (które są prawdopodobnie tak samo zbliżone do zapisanej reprezentacji jak .1)
Edytuj z komentarza: Powodem, dla którego jest to problem, są nasze oczekiwania. W pełni spodziewamy się, że 2/3 zostanie sfałszowane w pewnym momencie, gdy zamienimy je na dziesiętne, albo .7, .67 lub .666667 .. Ale nie oczekujemy, że .1 zostanie automatycznie zaokrąglone w taki sam sposób, jak 2/3 - i to jest dokładnie to, co się dzieje.
Nawiasem mówiąc, jeśli jesteś ciekawy, liczba, którą przechowuje wewnętrznie, jest czystą reprezentacją binarną przy użyciu binarnej „notacji naukowej”. Więc jeśli powiesz mu, aby zapisał liczbę dziesiętną 10,75d, zapisze 1010b dla 10 i .11b dla dziesiętnej. Więc zapisze .101011, a następnie zapisuje kilka bitów na końcu, aby powiedzieć: Przenieś przecinek dziesiętny o cztery miejsca w prawo.
(Chociaż technicznie nie jest to już przecinek dziesiętny, jest to teraz punkt binarny, ale ta terminologia nie uczyniłaby rzeczy bardziej zrozumiałymi dla większości ludzi, którzy uznaliby tę odpowiedź za użyteczną).