DAVID MALAN: Załóżmy teraz cios umysłu. Okazuje się, w prawdziwym świecie 1 podzielonej przez 10 rzeczywiście 1/10 lub 0,1. Ale tylko w komputerach, które mają skończone Liczba bitów o jakim oznaczają cyfry, nie może zawsze oznaczają numery, takie jak 1/10 z doskonała precyzja. Innymi słowy, komputerach czasem do połączeń wyroku i nie muszą odzwierciedlać numer, który chce tak dokładnie jak masz zamiar. Na przykład, załóżmy, że wracam do ten program i zmienić 0,1 do, O, 0,28, co wskazuje, że Chciałbym, aby printf do printf 28 miejsc precyzji. Załóżmy teraz zapisać i skompilować program, tym razem z make floats2. Uruchom go dot slash floats2. I, drogi Boże, tym razem nie patrz 0.1, ale 0.10000000, co jest dość dobry do tej pory. Ale potem, 14901161193847656250. Cóż, to, co się dzieje? Cóż, okazuje się, że pływak jest zwykle przechowywany wewnątrz komputera z 32 bitów. 32 jest oczywiście skończona liczba, która Oznacza to, że można reprezentować tylko z 32 bitów skończonej o wartości zmiennoprzecinkowe. Niestety, to znaczy, że Komputer nie może reprezentować wszystkie możliwe liczb zmiennoprzecinkowych lub liczby rzeczywiste, które istnieją w świecie ponieważ ma wiele bitów. I co z tego, że komputer jest najwyraźniej zrobione jest w tym przypadku stanowić 1/10 do najbliżej można zmiennoprzecinkowa Wartość punktu, że tak. Ale jeśli przyjrzymy się, jak my tu, do 28 miejsc po przecinku, zaczynamy widzieć, że brak precyzji. Więc to jest problem z nie idealne rozwiązanie. Możemy użyć double zamiast pływaka, która zmierza do stosowania 64 jako bity przeciwieństwie do 32. Oczywiście, 64 jest ograniczone, więc problem będzie pozostanie nawet z podwójnej.