Typy zmiennoprzecinkowe (takie jak Single i Double) są reprezentowane w pamięci przez znak, mantysę i wykładnik potęgi. Potraktuj to jako notację naukową:
Sign*Mantissa*Base^Exponent
Używają - jak można się spodziewać - podstawy 2. Istnieją inne poprawki, które pozwalają na reprezentowanie nieskończoności i NaN, a wykładnik jest przesunięty (wróci do tego), a stenografia dla mantysy (również do tego wróci) . Poszukaj standardu IEEE 754, który obejmuje jego reprezentację i operacje, aby uzyskać więcej szczegółów.
Dla naszych celów możemy sobie wyobrazić go jako liczbę binarną „mantysa” i „wykładnik”, który mówi ci, gdzie umieścić separator dziesiętny.
W przypadku singla mamy 1 bit na znak, 8 na wykładnik i 23 na mantysę.
Rzecz w tym, że będziemy przechowywać mantysę od najbardziej znaczącej cyfry. Pamiętaj, że wszystkie zera po lewej stronie nie są istotne. Biorąc pod uwagę, że pracujemy w trybie binarnym, wiemy, że najbardziej znaczącą cyfrą jest 1 ※. Skoro wiemy o tym, nie musimy go przechowywać. Dzięki temu skrótowi efektywny zasięg mantysy wynosi 24 bity.
※: Chyba że liczba, którą przechowujemy, wynosi zero. W tym celu wszystkie bity zostaną ustawione na zero. Jeśli jednak spróbujemy zinterpretować to pod podanym przeze mnie opisem, otrzymamy 2 ^ 24 (domyślną 1) pomnożoną przez 1 (2 do potęgi wykładnika 0). Tak więc, aby to naprawić, wykładnik zera jest wartością specjalną. Istnieją również specjalne wartości do przechowywania nieskończoności i NaN w wykładniku.
Zgodnie z przesunięciem wykładnika - oprócz unikania specjalnych wartości - przesunięcie pozwala na umieszczenie kropki dziesiętnej przed początkiem mantysy lub po jej zakończeniu, bez potrzeby posiadania znaku dla wykładnika.
Oznacza to, że w przypadku dużych liczb typ zmiennoprzecinkowy umieści przecinek dziesiętny poza końcem mantysy.
Pamiętaj, że mantysa jest liczbą 24-bitową. Nigdy nie będzie reprezentował 25-bitowej liczby ... nie ma tego dodatkowego bitu. Zatem singiel nie może rozróżnić między 2 ^ 24 a 2 ^ 24 + 1 (są to pierwsze 25 bitów, i różnią się w ostatnim bicie, który nie jest reprezentowany w singlu).
Zatem dla liczb całkowitych zasięg singla wynosi od -2 ^ 24 do 2 ^ 24. A próba dodania 1 do 2 ^ 24 spowoduje 2 ^ 24 (ponieważ jeśli chodzi o typ, 2 ^ 24 i 2 ^ 24 + 1 mają tę samą wartość). Wypróbuj online . Dlatego podczas konwersji z liczby całkowitej na liczbę pojedynczą występuje utrata informacji. I właśnie dlatego pętla, która korzysta z pojedynczego lub podwójnego, może być pętlą nieskończoną bez zauważenia.