|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Liczba zmiennoprzecinkowa jest komputerową reprezentacją liczb rzeczywistych zapisanych w postaci wykładniczej (zwanej też notacją naukową). Ze względu na wygodę operowania na takich liczbach przyjmuje się ograniczony zakres na mantysę i cechę. Powoduje to, że reprezentacja jest tylko przybliżona a jedna liczba zmiennoprzecinkowa może reprezentować różne liczby rzeczywiste z pewnego odcinka.
edytuj Podstawa matematyczna
Reprezentacja zmiennoprzecinkowa IEEE-754 single
Wartość liczby zmiennoprzecinkowej jest obliczana wg wzoru: gdzie:
Mantysa jest znormalizowana, tj. należy do przedziału [1,B) (przedział prawostronnie otwarty!). Jeżeli M jest stałe, a E zmienia się, wówczas przesunięciu ulega przecinek – stąd właśnie pochodzi nazwa tej reprezentacji. Zarówno dla mantysy jak i wykładnika ilość cyfr jest z góry ustalona. Zatem dana liczba jest reprezentowana z pewną skończoną dokładnością i należy do skończonego zbioru wartości. Załóżmy, że m to liczba cyfr przeznaczonych na mantysę, natomiast n+1 to liczba cyfr przeznaczonych na wykładnik (n cyfr dla wartości i 1 dla znaku wykładnika). Uznaje się również, że jedna dodatkowa pozycja (najstarsza) zarezerwowana jest dla zapisu znaku całej liczby. Wówczas wartości maksymalne i minimalne dla M i E określone są następująco:
Stąd najmniejsza i największa liczba dodatnia możliwa do zapisania w takiej reprezentacji to:
Zakres liczb, które mogą być reprezentowane w danym zapisie wynosi: Zero jest wartością specjalną, która nie może zostać bezpośrednio reprezentowana w tym formacie. Błąd względny reprezentacji wynosi
W przypadku, gdy otrzymana liczba edytuj Przykład reprezentacjiPrzyjmijmy, że B = 10, liczba cyfr dziesiętnych przeznaczonych na mantysę wynosi 4, natomiast na wykładnik 2. Chcemy zapisać wartość 60,89523.
Przykład dla liczby mniejszej 1: 0,0000125.
edytuj Operacje na liczbach zmiennoprzecinkowychedytuj Własności arytmetyki zmiennoprzecinkowejArytmetyka zmiennoprzecinkowa nie jest łączna. To znaczy: iż dla x, y i z mogą zachodzić różności:
ani rozdzielna czyli może zachodzić różność: Innymi słowy kolejność wykonywania operacji wpływa na końcowy wynik. Przy obliczeniach zmiennoprzecinkowych występują też inne problemy:
edytuj Dodawanie i odejmowanie
Jeśli liczby mają różne wykładniki, to podczas dodawania jedna z mantys musi zostać zdenormalizowana – we wzorze jest to przemnożenie M2 przez czynnik edytuj Mnożenieedytuj Dzielenieedytuj Błędy operacji elementarnychWygodnie jest przedstawić liczbę zmiennoprzecinkową jako wartość dokładną zaburzoną pewnym błędem reprezentacji Wówczas błąd względny poszczególnych operacji elementarnych wykonywanych na liczbach
gdzie Rozbijając każde wyrażenie arytmetyczne na operacje elementarne, można za pomocą tych zależności oszacować powstałe błędy. Istnieją jednak lepsze i szybsze metody modelowania błędów. edytuj Implementacje sprzętoweW implementacjach sprzętowych liczby zmiennoprzecinkowe są zrelizowane na liczbach dwójkowych (B=2). Wiąże się to z następującymi zaletami:
W celu ujednolicenia zasad operacji na liczbach zmiennoprzecinkowych na różnych platformach sprzętowych, opracowano standard IEEE 754, w oparciu o który realizuje się obecnie praktycznie wszystkie implementacje sprzętowe liczb zmiennoprzecinkowych. Definiuje on dwie klasy liczb:
Są również inne sposoby zapisu, różniące się jedynie liczbą bitów przeznaczoną na poszczególne pola. Np. koprocesor w procesorach x86, oprócz typów standardowych, wspiera ponadto liczby 10-bajtowe, natomiast kompilator Pascala liczby 6-bajtowe[1].
edytuj Przesunięcie wykładnikaWykładnik, w celu uniknięcia konieczności kodowania jego znaku (liczba miałaby dwa bity znaku), zapisywany jest jako wartość przesuniętą o pewną stałą (ang. biased exponent). Właściwą wartość wykładnika uzyskuje się odejmując od zakodowanego wykładnika wartość przesunięcia (ang. bias). Wartość liczby zmiennoprzecinkowej oblicza się ze wzoru: gdzie S to bit znaku; liczba jest ujemna, gdy bit znaku jest równy 1, w przeciwnej sytuacji jest 0. Typowe wartości przesunięcia dla koprocesora x87 (występującego w procesorach x86) wynoszą:
edytuj Wartości specjalneOprócz zwykłych liczb, zdefiniowano następujące wartości specjalne:
edytuj Typy zmiennoprzecinkowe w językach programowaniaedytuj C, C++Rozmiar typów zmiennoprzecinkowych zależy od konkretnych implementacji. Standardowo, typ float zajmuje co najmniej 4 bajty, double 8 bajtów, a long double zazwyczaj 8-12 bajtów. W przypadku kompilatora GCC w wersji 3.3.5, długości typów wynoszą odpowiednio 4, 8 i 12 bajtów. edytuj PascalZadeklarowane zmienne typu real mogą przyjmować wartości rzeczywiste z przedziału od 2.9 · 10-39 do 1.7 · 1038, co wynika z przeznaczenia na taką liczbę 6 bajtów. edytuj FortranW oryginalnej specyfikacji języka Fortran typ real miał dwie możliwe długości REAL i DOUBLE PRECISION. Zakres i precyzja obydwu typów nie były wyspecyfikowane, lecz zależały od architektury konkretnego komputera, z wymaganiem aby DOUBLE PRECISION miał wyższą precyzję i co najmniej taki sam zakres co REAL. Z czasem rynek został całkowicie zdominowany przez komputery o architekturze opartej o 8-bitowe bajty, przyjęło się, że podstawowy typ REAL zajmuje 4 bajty. Współczesne kompilatory Fortran-u dopuszczają deklaracje:
Niektóre implementacje dopuszczają także typ:
edytuj KalkulatorSposoby wyświetlania liczb zmiennoprzecinkowych:
edytuj HistoriaBinarne liczby zmiennoprzecinkowe po raz pierwszy zastosował Konrad Zuse w mechanicznym komputerze Z1. Przypisy
edytuj Zobacz też
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| All Right Reserved © 2007, Designed by Stylish Blog. |