liczby zmiennoprzecinkowe
Dlaczego potrzebne są liczby zmiennoprzecinkowe
ponieważ pamięć komputera jest ograniczona, nie można przechowywać liczb z nieskończoną precyzją, bez względu na to, czy używasz ułamków binarnych, czy dziesiętnych: w pewnym momencie musisz się odciąć. Ale ile dokładności jest potrzebne? A gdzie jest to potrzebne? Ile cyfr całkowitych i ile cyfr ułamkowych?
- dla inżyniera budującego autostradę nie ma znaczenia czy jest to 10 metrów czy 10.0001 metrów szerokości-ich pomiary prawdopodobnie nie są aż tak dokładne.
- dla kogoś, kto projektuje mikrochip, 0,0001 metra (jedna dziesiąta milimetra) to ogromna różnica – ale nigdy nie będzie musiał radzić sobie z odległością większą niż 0,1 metra.
- fizyk musi użyć prędkości światła (około 300000000) i stałej grawitacyjnej Newtona (około 0,000000000667) razem w tych samych obliczeniach.
aby zadowolić inżyniera i projektanta chipów, format liczb musi zapewniać dokładność liczb przy bardzo różnych wielkościach. Potrzebna jest jednak tylko względna dokładność. Aby zadowolić fizyka, musi być możliwe wykonywanie obliczeń, które obejmują liczby o różnych magnitudach.
zasadniczo posiadanie stałej liczby całkowitej i ułamkowej nie jest użyteczne – a rozwiązaniem jest format z wartością zmiennoprzecinkową.
jak działają liczby zmiennoprzecinkowe
ideą jest skomponowanie liczby z dwóch głównych części:
- a, która zawiera cyfry liczby. Wartości ujemne oznaczają liczby ujemne.
- wykładnik, który mówi, gdzie punkt dziesiętny (lub binarny) jest umieszczony względem początku significand. Ujemne wykładniki reprezentują liczby bardzo małe (tj. bliskie zeru).
taki format spełnia wszystkie wymagania:
- może reprezentować liczby przy bardzo Różnych magnitudach (ograniczone długością wykładnika)
- zapewnia taką samą względną dokładność we wszystkich magnitudach (ograniczone długością significand)
- umożliwia obliczenia w różnych magnitudach: mnożenie bardzo dużej i bardzo małej liczby zachowuje dokładność obu w wyniku.
dziesiętne liczby zmiennoprzecinkowe zwykle przyjmują formę notacji naukowej z punktem jawnym zawsze między 1.A 2. cyfrą. Wykładnik zapisywany jest wprost wraz z podstawą, lub używa się e do oddzielenia go od significand.
standard
prawie wszystkie języki sprzętowe i programowania używają liczb zmiennoprzecinkowych w tych samych formatach binarnych, które są zdefiniowane w standardzie IEEE 754. Zwykle formaty mają długość całkowitą 32 lub 64 bity:
Format | Total bits | Significand bits | Exponent bits | Smallest number | Largest number |
---|---|---|---|---|---|
Single precision | 32 | 23 + 1 sign | 8 | ca. 1.2 ⋅ 10-38 | ca. 3.4 ⋅ 1038 |
Double precision | 64 | 52 + 1 sign | 11 | ca. 2.2 ⋅ 10-308 | ca. 1.8 ⋅ 10308 |
zauważ, że istnieją pewne osobliwości:
- rzeczywista Sekwencja bitów jest bitem znaku, po którym następuje wykładnik, a na końcu bity significand.
- wykładnik nie ma znaku; zamiast tego odejmuje się od niego odchylenie wykładnika (127 dla pojedynczej i 1023 dla podwójnej precyzji). To, podobnie jak Sekwencja bitów, pozwala na poprawne porównywanie i sortowanie liczb zmiennoprzecinkowych nawet podczas ich interpretacji jako liczb całkowitych.
- najistotniejsza cyfra significanda jest pominięta i przyjmuje się, że jest to 1, z wyjątkiem liczb podnormalnych, które są oznaczone wykładnikiem all-0 i pozwalają na zakres liczb poza najmniejszymi liczbami podanymi w powyższej tabeli, kosztem precyzji.
- istnieją oddzielne wartości dodatnie i ujemne, różniące się bitem znaku, gdzie wszystkie pozostałe bity są równe 0. Należy je uznać za równe, mimo że ich wzorce bitowe są różne.
- istnieją specjalne dodatnie i ujemne wartości nieskończoności, gdzie wykładnik to wszystkie 1-bity, a significand to wszystkie 0-bity. Są to Wyniki obliczeń, w których przekroczony jest dodatni zakres wykładnika, czyli dzielenie liczby regularnej przez zero.
- istnieją specjalne wartości not a number (lub NaN), gdzie wykładnik jest wszystkimi 1-bitami, a significand nie jest wszystkimi 0-bitami. Reprezentują one wynik różnych niezdefiniowanych obliczeń (takich jak mnożenie 0 i nieskończoności, dowolne obliczenia obejmujące wartość NaN lub przypadki specyficzne dla aplikacji). Nawet identyczne bitowo wartości NaN nie mogą być uważane za równe.
Jeśli wydaje się to zbyt abstrakcyjne i chcesz zobaczyć, jak niektóre konkretne wartości wyglądają w IEEE 754, wypróbuj zabawkę Float lub wizualizację IEEE 754 lub Float Exposed.
Leave a Reply