Tak, podwójne może reprezentować dowolną liczbę, którą może pływać. Podobnie w przypadku czterokrotnej precyzji itp.
Liczba zmiennoprzecinkowa jest reprezentowana w postaci: 1.01b x 2^-1
(w tym przypadku 0,625). Istotnymi składnikami tej liczby są significand, który jest w zasadzie liczbą binarną z punktem radix zazwyczaj tuż po pierwszej cyfrze i wykładnikiem.
Jedyna istotna różnica między binarnymi formatami zmiennoprzecinkowymi to liczba bitów dla każdego komponentu. Im więcej bitów wykorzystuje ten numer, tym więcej bitów jest dostępnych dla każdej części. Tak więc 32-bitowy "float" może mieć 1.01000000000000000000000 dla znacznika, a (64-bitowy) "double" będzie miał około 50 cyfr po kropce. Oznacza to, że każda liczba, która jest dokładnie reprezentowana w float, jest również dokładnie reprezentowana w podwójnym, ponieważ masz zarówno zwiększoną precyzję (czytaj: bardziej znaczące cyfry) i zwiększony zasięg. Jest podobny do tego, jak 64-bitowa zmienna całkowita może zawierać dowolną 32-bitową liczbę całkowitą; dodatkowe bity są po prostu nieużywane.
Oczywiście, wszystkie bity, które zostały odcięte z powodu błędu zaokrąglenia, nie powrócą do liczby po przekonwertowaniu jej na podwójny - co oznacza, że masz 0,3 w float, co jest niedokładnym wynikiem, takim jak 0.2999999875 lub coś (nie mam ochoty na liczenie), nie zbliży się do 0.3, gdy skonwertujesz go na podwójne - nadal będzie to 0,2999999875. Jeśli chcesz zbliżyć się do siebie, będziesz musiał powtórzyć obliczenia za pomocą podwójnych od początku.
Moje wspomnienie jest takie, że pojedyncze i podwójne różnią się tylko liczbą bitów przypisanych do mantysy/wykładnika. Jednak nie mam odniesienia, więc nie jest to odpowiedź. Ale +1, to dobre pytanie. – kdgregory