Liczba zmiennoprzecinkowa: co to jest? Po prostu wyjaśnione przykładami
W tej praktycznej wskazówce pokazujemy, czym jest liczba zmiennoprzecinkowa i czym różni się od liczby stałej.
Liczba zmiennoprzecinkowa: co to jest?
W informatyce liczba zmiennoprzecinkowa jest często używana do pomiaru urządzeń, które powinny działać z pewną dokładnością.
- Liczba zmiennoprzecinkowa (lub „liczba zmiennoprzecinkowa”) jest reprezentacją liczby przy użyciu notacji wykładniczej. W wyjątkowych przypadkach działa to tylko w przybliżeniu. Możesz również przedstawić liczbę 1230000 liczbą 1, 23 ⋅ 10⁶.
- 1.23 nazywa się „Mantissa”. 10 to „podstawa”, a 6 to „wykładnik”. Nawiasem mówiąc, do mantysy można również dodać znak. Możesz jednak zastosować całość do podwójnego systemu. Możesz także przedstawić liczbę 10101100 liczbą 1, 0101100 ⋅ 2⁷. Komputer przechowuje tylko znak, mantysę i wykładnik potęgi.
- Komputery zwykle przesuwają przecinek w tę iz powrotem, dopóki przed przecinkiem nie ma tylko 1. Wtedy komputer musi tylko zapisać miejsca dziesiętne mantysy i wykładnika potęgi.
- Aby wykładnik mógł zostać zapisany jako liczba dodatnia, dodawana jest stała liczba, tzw. Odchylenie. Najmniejszy możliwy wykładnik miejsca przed przecinkiem dziesiętnym (- odchylenie) jest zapisywany jako 0.
- W przeciwieństwie do liczby w punkcie stałym przecinek nie znajduje się w punkcie stałym w liczbie zmiennoprzecinkowej.
Half, Float & Double - Wspólne kodowanie liczb zmiennoprzecinkowych
Z pewnością natknąłeś się na te trzy warunki, szczególnie podczas programowania w Arduino. Są to standardowe reprezentacje.
- Typ danych „połowa” jest liczbą 16-bitową. Najbardziej lewy bit odpowiada za znak. Wykładnik ma 5 bitów i mantysę 10. Zastosowane odchylenie wynosi 15. Ponieważ pierwszy kawałek mantysy ma (prawie) zawsze 1, nie jest to zapisywane.
- Typ danych „float” (lub „single”) jest liczbą 32-bitową. Tutaj również trochę jest używany do znaku. Jednak wykładnik ma 8 bitów (odchylenie = 127) i mantysę 23.
- Typ danych „double” również używa nieco znaku. Tutaj jednak wykładnik ma 11 bitów (odchylenie = 1023), a mantysa nawet 52 bity. W sumie jest to 64 bity, czyli 8 bajtów.
- Oprócz tych trzech typowych typów danych istnieje wiele innych. Jednak najczęściej nie są one używane, ponieważ dokładność połowy, liczby zmiennoprzecinkowej i podwójnej jest już wystarczająca.
Konwertuj liczby dziesiętne na liczby zmiennoprzecinkowe - jak to działa
Na koniec chcielibyśmy pokazać, jak przekonwertować zwykłą liczbę dziesiętną na liczbę zmiennoprzecinkową.
- W tym przykładzie używamy liczby dziesiętnej 18, 4. Liczba przed kropką dziesiętną jest najpierw przenoszona do systemu podwójnego. W rezultacie powinieneś dostać (10010) ₂.
- Następnie musisz przekonwertować 0, 4. Najpierw pomnóż 0, 4 przez 2. W rezultacie otrzymasz 0, 8. Zanotuj liczbę przed przecinkiem. W tym przypadku jest to 0. Następnie pomnóż 0, 8 przez 2. Tym razem otrzymasz wynik 1, 6. Zanotuj 1 i kontynuuj obliczanie za pomocą 0.6. Po chwili zauważysz, że wzór się powtarza (w tym przykładzie). Na koniec zapisz wszystkie liczby od góry do dołu: 011001100110 ...
- Następnie dodaj liczby razem: Dodaj także (⋅ 2⁰), aby uzyskać 10010.01100110 ... ⋅ 2⁰. Następnie przesuwaj przecinek, aż będzie tylko 1 przed przecinkiem, a także odpowiednio zmieniaj moc. W rezultacie powinieneś dostać 1.001001100110 ... ⋅ 2⁴, ponieważ przesunąłeś przecinek dziesiętny o 4 miejsca w lewo. Ten etap nazywany jest również „normalizacją”.
- W tym przykładzie używamy typu danych „float”. Dodaj odpowiednią wartość odchylenia do wykładnika. Musisz również przekonwertować wynik obliczenia 4 + 127 = 131 na liczbę binarną. Liczba 131 to liczba 10000011 w systemie podwójnym.
- Teraz możesz zapisać gotowy numer zmiennoprzecinkowy. Najpierw napisz bit dla znaku. Ponieważ jest to liczba dodatnia, pierwszy bit to 0. Następnie musisz wpisać 131. Całość pasuje idealnie w tym przypadku, ponieważ ta liczba wymaga 8 bitów i 8 bitów jest dostępnych dla liczby zmiennoprzecinkowej. Na koniec musisz zapisać pierwsze 23 bity mantysy, ponieważ mantysa ma 23 bity dostępne dla pływaka.
- Dlatego ukończony numer zmiennoprzecinkowy powinien być numerem 01000001100100110011001100110011. Nieco wyraźniejszy jest numer 0 | 10000011 | 00100110011001100110011.
Konwertuj liczbę zmiennoprzecinkową na liczbę dziesiętną - oto jak to zrobić
Na koniec chcielibyśmy pokazać, jak ponownie przekonwertować liczbę zmiennoprzecinkową na liczbę dziesiętną. W tym celu bierzemy numer 1000001100100110011001100110011.
- Najpierw wypełnij cyfrę (przód) zerami, aż pojawi się liczba 16, 32 lub 64 bitów. W tym przypadku jest to 01000001100100110011001100110011.
- Pierwsza cyfra oznacza znak. Więc nasza liczba jest dodatnia.
- Następnie napisz kolejne (w tym przypadku) 8 cyfr i odejmij błąd systematyczny. (10000011) ₂ = 131 → 131 - 127 = 4 → Więc z tyłu jest „⋅ 2⁴”.
- Teraz napisz „1”, a następnie wszystkie pozostałe liczby, a także „⋅ 2⁴”: 1.00100110011001100110011 ⋅ 2⁴
- Następnie przesuń przecinek o 4 miejsca w prawo, aby pominąć „⋅ 2⁴”: 10010.0110011001100110011
- Następnie jak zwykle przekonwertuj 10010 na liczbę całkowitą. Dostajesz 18.
- Teraz musisz przeliczyć miejsca dziesiętne. Pierwsza cyfra po przecinku ma wartość 1: 2¹, druga cyfra 1: 2² i tak dalej. Dodaj wartości, a liczba przed przecinkiem daje liczbę 18.3999996185302734375.
W kolejnej praktycznej wskazówce pokażemy, jak konwertować litery ASCII na liczby binarne.