Liczba zmiennoprzecinkowa
Liczba zmiennoprzecinkowa – komputerowa reprezentacja 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.
Spis treści |
Podstawa matematyczna
Wartość liczby zmiennoprzecinkowej jest obliczana wg wzoru:
gdzie:
- S (ang. sign) – znak liczby, 1 lub -1
- M (ang. mantissa) – znormalizowana mantysa, liczba ułamkowa
- B (ang. base) – podstawa systemu liczbowego (2 dla systemów komputerowych)
- E (ang. exponent) – wykładnik, liczba całkowita
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:
- Wykładnik E:
- Emin = − Bn + 1
- Emax = Bn − 1
- Mantysa M:
- Mmin = 1
- Mmax = B − B − (m − 1)
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
(inaczej: waga najmniej znaczącej cyfry mantysy). Błędów bezwzględnych na ogół się nie podaje.
Jeżeli komputer wygeneruje liczbę
, to traktowana jest jako niedomiar (underflow).
W przypadku, gdy otrzymana liczba
, to traktowana jest jako nadmiar wykładniczy (overflow).
Przykład reprezentacji
Przyjmijmy, że B = 10, liczba cyfr dziesiętnych przeznaczonych na mantysę wynosi 4, natomiast na wykładnik 2. Chcemy zapisać wartość 60,89523.
- Pierwszy etap to normalizacja mantysy, sytuacja przedstawia się następująco:
. Mantysa M nie należy do zadanego przedziału [1,10), zatem należy przesuwać przecinek w lewo do chwili, aż wartość M będzie doń należała. Przesuwanie przecinka w lewo wiąże się ze zwiększaniem E. - Po normalizacji (przesunięciu przecinka o 1 pozycje w lewo) otrzymujemy:

- Ostatnim krokiem jest odpowiednie obcięcie (ang. truncate), albo zaokrąglenie (ang. round) mantysy do zadanej ilości cyfr.
- obcięcie:

- zaokrąglenie:

- obcięcie:
Przykład dla liczby mniejszej od 1: 0,0000125.
- Mantysa 0,0000125 nie jest znormalizowana, należy tym razem przesuwać przecinek w prawo, co wiąże się ze zmniejszaniem E.
- Po normalizacji, tj. przesunięciu przecinka o 5 pozycje w prawo, otrzymujemy:
. - Liczba cyfr znaczących jest mniejsza od dostępnej, więc nie potrzebna żadna forma zaokrąglania. Liczba ma postać
.
Operacje na liczbach zmiennoprzecinkowych
Własności arytmetyki zmiennoprzecinkowej
Arytmetyka 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:
- zaokrąglenia
- nieprawidłowe operacje
- przepełnienie
- niedomiar
Dodawanie i odejmowanie
Załóżmy że chcemy dodać lub odjąć dwie dodatnie liczby zmiennoprzecinkowe:
oraz
, przy czym
. Założenia te można spełnić dla dowolnych liczb zmiennoprzecinkowych manipulując ich kolejnością, znakiem wyniku oraz rodzajem wykonywanej operacji, wg poniższego schematu:
Wówczas:
Jeśli liczby mają różne wykładniki, to podczas dodawania mantysa liczby o mniejszym wykładniku musi zostać zdenormalizowana – we wzorze jest to przemnożenie M2 przez czynnik
. W szczególnym przypadku, jeśli E1 − E2 jest większe niż m (ilość cyfr mantysy), to po tej denormalizacji mantysa będzie miała wartość 0 i liczba o mniejszym wykładniku nie wpłynie na wynik dodawania bądź odejmowania.
Odejmowanie liczb zmiennoprzecinkowych o takim samym wykładniku E i niewiele różniącej się mantysie, powoduje że wynikowa mantysa jest znacznie zdenormalizowana. Renormalizacja w takim wypadku wiąże się z wprowadzeniem sporej ilości nieznaczących zer na końcu mantysy. Jest to szczególnie niekorzystne, dlatego zwykle tak projektuje się obliczenia aby do tego nie dopuścić.
Mnożenie i dzielenie
Mając dane liczby zmiennoprzecinkowe
i
:
Błędy operacji elementarnych
Wygodnie 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
oraz
można oszacować następująco:
- dodawanie/odejmowanie:

- mnożenie:

- dzielenie:

gdzie
,
i
to błędy wprowadzane przez dane opracje arytmetyczne.
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.
Implementacje sprzętowe
W implementacjach sprzętowych liczby zmiennoprzecinkowe są zrelizowane na liczbach dwójkowych (B=2). Wiąże się to z następującymi zaletami:
- Mantysa należy do przedziału [1,2), jest więc postaci 1.xxxxx.... (x – bit o dowolnej wartości). Ponieważ część całkowita jest znana, równa zawsze 1, nie jest zapamiętywana, co daje dodatkowy bit na część ułamkową.
- Ponieważ znak liczby jest zapamiętywany na jednym bicie, to otrzymanie modułu i wartości przeciwnej wymaga, odpowiednio, wyzerowaniu tego bitu (logiczna operacja AND), lub zmiany na wartość przeciwną (logiczna operacja XOR).
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:
- pojedynczej precyzji (ang. single)
- podwójnej precyzji (ang. double)
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]. Liczby zgodne ze standardem IEEE 754 mają dokładnie określoną semantykę, jak na przykład dokładność operacji elementarnych, kierunki zaokrągleń czy obsługa sytuacji wyjątkowych – są to cechy bardzo pożądane w zastosowaniach naukowych i inżynieryjnych, ułatwiają również przenoszenie kodu programu na inny sprzęt.
| Format | Znak [bity] | Wykładnik [bity] | Mantysa [bity] | Szerokość słowa [bity] | Typy w językach programowania |
|---|---|---|---|---|---|
| IEEE-754 single | 1 | 8 | 23 | 32 | float (C), single (Pascal), real*4 (Fortran) |
| IEEE-754 double | 1 | 11 | 52 | 64 | double (C), real lub double (Pascal), real*8 (Fortran) |
| koprocesor x87 | 1 | 15 | 64 | 80 | long double (C99), extended (Pascal) |
| Turbo Pascal | 1 | 8 | 39 | 48 | real/real48 (Turbo Pascal) |
| SSE5, OpenGL 3.0[2] | 1 | 5 | 10 | 16 | w OpenGL nazywana half-float |
Przesunięcie wykładnika
Wykł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ą:
- 127 (7FH) w formacie 32-bitowym
- 1023 (3FFH) w formacie 64-bitowym
- 16383 (3FFFH) w formacie 80-bitowym
Wartości specjalne
Oprócz zwykłych liczb, zdefiniowano następujące wartości specjalne:
- NaN – nie-liczba (ang. Not-a-Number), to symbol, który nie reprezentuje wartości liczbowej, powstały zazwyczaj w wyniku niedozwolonej operacji (np. pierwiastkowanie liczby ujemnej)
- sNaN – sygnalizujące NaN (ang. signalling NaN) – rozróżnienie wprowadzone w procesorach z rodziny x86; dla większości operacji wykonanie liczba operacja sNaN spowoduje zgłoszenie wyjątku.
- qNaN – ciche NaN (ang. quiet NaN) – przekazanie tej wartości jako argumentu operacji nie powoduje zgłoszenia wyjątku; w operacjach SSE można ustalić, że liczba operacja qNaN → 0.
- Zero – rozróżnia się +0,0 i -0,0.
- Nieskończoność – jest wynikiem operacji w przypadku wystąpienia nadmiaru (przepełnienia), przy dzieleniu przez 0, itp.; może być dodatnia lub ujemna.
- Liczba zdenormalizowana – pojawia się, gdy występuje niedomiar (ang. underflow), ale wynik operacji jeszcze można zapisać denormalizując mantysę (w takim przypadku mantysa reprezentuje liczbę w postaci 0,xxx...xxx, a nie 1,xxx...xxxx).
| Wartość specjalna | Bit znaku | Bity wykładnika | Bity mantysy | Uwagi |
|---|---|---|---|---|
| NaN | x | 111..111 | xxxx...xxx | wszystkie bity wykładnika są równe 1, natomiast mantysa ma niezerową wartość |
| QNaN | x | 111..111 | 1xxx...xxx | uwagi jak dla NaN, ale pierwszy bit mantysy zawsze równy 1 |
| SNaN | x | 111..111 | 0xxx...xxx | uwagi jak dla NaN, ale pierwszy bit mantysy zawsze równy 0 |
| ±Zero | x | 000..000 | 0000...000 | wszystkie bity mantysy i wykładnika równe 0, bit znaku decyduje o znaku wartości |
| ±Nieskończoność | x | 111..111 | 0000...000 | wszystkie bity mantysy równe 0, wszystkie bity wykładnika równe 1, bit znaku decyduje o znaku wartości |
| Zdenormalizowana | x | 000..000 | xxxx...xxx | mantysa różna od 0, wszystkie bity wykładnika równe 0, bit znaku decyduje o znaku wartości |
Typy zmiennoprzecinkowe w językach programowania
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.
Pascal
Zadeklarowane 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.
Fortran
W 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:
- REAL*4 lub po prostu REAL – 32 bity, odpowiednik typu float w języku C
- REAL*8 lub DOUBLE PRECISION – 64 bity, odpowiednik typu double w języku C
Niektóre implementacje dopuszczają także typ:
- REAL*16 – 128 bitów.
Kalkulator
Sposoby wyświetlania liczb zmiennoprzecinkowych:
- FLO (Floating Notation) – notacja dziesiętna – tryb domyślny. Jeżeli jest to możliwe wyświetla liczbę z wykładnikiem równym 0 pomijając jego wyświetlanie
- SCE (Scientific Notation) – notacja naukowa – zawsze wyświetla liczbę z wykładnikiem
- ENG (Engineering Notation) – notacja inżynierska – zawsze wyświetla liczbę z wykładnikiem podzielnym przez 3.
Historia
Binarne liczby zmiennoprzecinkowe po raz pierwszy zastosował Konrad Zuse w mechanicznym komputerze Z1.
Przypisy
- ↑ Firma Borland w kompilatorach języka Pascal począwszy od wersji Delphi 3.0 przyjęła za standard liczb zmiennoprzecinkowych liczby typu double, stary typ został nazwany real48 i jest obsługiwany w celu zachowania kompatybilności z poprzednimi wersjami, ale ma status przestarzałego elementu języka, który w pewnym momencie może przestać być obsługiwany.
- ↑ Specyfikacja OpenGL 3.0, wersja z 11.08.2008, sekcja 2.1.2 "16-Bit Floating Point Number"
Zobacz też
|
||||||||
| Gry komputerowe Gry komputerowe, piłkarskie, sport… www.euro-mistrzostw… | poradniki do gier www.gry.mocny.com | Firany www.finezja-studio.… | Darmowe gry darmowe gry, gry www.gry.emity.pl | pomoc domowa Warszawa Agencja Dudek www.agencjadudek.pl |
Być może zainteresują Cię strony:
hosting karta płatnicza visa motorówki Odzież Ciążowa controlling rozporządzenia konstrukcje stalowe Gran Canaria wakacje
Nauka na Focus.pl
Dieta na sto lat
Kiełki brokułu, kawior i jeżyny popite zieloną herbatą – takie menu proponują nam naukowcy. Na szczęście superzdrowa dieta przyszłości nie musi być monotonna
Thu, 29 Jul 2010 09:00:00 +0200
Twoja przyszłość w DNA
Jeszcze 40 lat temu testy genetyczne były zaliczane do fikcji literackiej. Dziś na rynku jest ich ponad 900, ale prawdziwa rewolucja dopiero przed nami
Tue, 27 Jul 2010 09:00:00 +0200
Szukamy piątego elementu
Czy na nasze organizmy działa jakaś nieznana jeszcze nauce siła, odpowiedzialna np. za zjawiska paranormalne? Zdaniem badaczy jest to możliwe
Mon, 26 Jul 2010 09:00:00 +0200
Łowcy spadających gwiazd
Czy może być coś bardziej romantycznego niż poszukiwanie skarbów? Szukanie meteorytów! Blask garnka pełnego złotych monet blednie przy kosmicznych kamieniach
Wed, 21 Jul 2010 09:00:00 +0200
Wzór na rzeczywistość
Fraktale można dostrzec wszędzie – w kształtach chmur, budowie kalafiora, rozgałęzieniach naczyń krwionośnych. Czy to przypadek? Zdaniem uczonych te miłe dla oka wzorki mogą pomóc nam zrozumieć zjawiska tak fundamentalne, jak zmiany klimatyczne czy struktura wszechświata
Sun, 18 Jul 2010 09:00:00 +0200
Historia na Focus.pl
Agentka w synagodze
Karin Mylius została pierwszym rabinem w dziejach Niemiec. Nie była jednak Żydówką, lecz utalentowaną agentką Stasi
Fri, 30 Jul 2010 16:00:00 +0200
Wycieczka Focusa - okolice Ostrowca
Nieczynny kamieniołom w Zachełmiu w Górach Świętokrzyskich stał się na początku 2010 roku źródłem sensacji na skalę światową.
Fri, 30 Jul 2010 09:00:00 +0200
Koniec baśni o samozwańcu
Jan Faustyn Łuba śnił o moskiewskim tronie, a przeżył koszmar. Rzeczpospolita marzyła o straszaku przeciw Moskwie, lecz spotkało ją upokorzenie. Król Władysław IV widział się w roli krzyżowca, ale zaskoczyła go śmierć
Thu, 29 Jul 2010 16:00:00 +0200
Zmora Kremla
Nie musimy się wstydzić tego, jak 400 lat temu walczyliśmy o tron carów. A czy powinniśmy żałować, że nam się nie udało? Nasze imperium i tak nie przetrwałoby do dziś
Wed, 28 Jul 2010 16:00:00 +0200
Wycieczka Focusa - okolice Szczecinka
Niedaleko od miejscowości Brzeźnica-Kolonia znajduje się obszar, którego przeznaczenie nie jest do końca znane. Istniejące tam budynki postawiono w latach 1972–1978 i kiedyś stacjonowały tu wojska radzieckie, a mówiąc ściślej 300 żołnierzy i oficerów z rodzinami.
Wed, 28 Jul 2010 09:00:00 +0200
Cywilizacja na Focus.pl
Z notatnika negocjatora
Centrum Warszawy, wieżowiec przy rondzie ONZ. Około godziny 17 w banku zjawia się 50-letni mężczyzna. Nerwowo lustruje główne pomieszczenie, następnie wraca do holu i wchodzi do pomieszczenia administracyjnego
Wed, 28 Jul 2010 17:43:00 +0200
Koniec niewinności
Nastolatki nigdy nie były święte, ale teraz idą na całość. Po raz pierwszy w historii dorównują chłopcom zachowaniem, a niektórzy twierdzą, że są od nich gorsze. Dlaczego się wykoleiły?
Sat, 24 Jul 2010 09:00:00 +0200
Wyjazd z gabloty
Nowoczesne muzea zamieniają się w multipleksy. Stawiają na rozrywkę i zarabiają krocie. Można w nich spędzać całe dnie i, ucząc się, dobrze się bawić
Fri, 23 Jul 2010 09:00:00 +0200
Jasnowidze z CIA
Jest w tym więcej prawdy, niż może się wydawać – uprzedzają twórcy filmu o absurdalnym tytule i nie mniej absurdalnej fabule. „Człowiek, który gapił się na kozy” to opowieść o tajemnicach amerykańskiej armii, które ujawnił członek oddziału żołnierzy ze zdolnościami parapsychologicznymi
Thu, 22 Jul 2010 09:00:00 +0200
Bloki dla ludzi
Blokowiska nie muszą straszyć. Mogą być wspaniałym miejscem do życia. Po latach niełaski bloki znowu zaczynają się podobać: architektom i zwykłym mieszkańcom
Tue, 20 Jul 2010 09:00:00 +0200
Nauka na Onet.pl
Duża asteroida może grozić Ziemi zderzeniem
Asteroida o średnicy 560 metrw może w przyszłości zderzyć się z Ziemią. Groźba takiej katastrofy w najbliższych dziesięcioleciach jest niewielka, jednakże wzrośnie znacząco, kiedy to ciało niebieskie zbliży się do naszej planety w 2182 roku.
Fri, 30 Jul 2010 15:10:00 GMT
Życie w kosmosie? Dowd sprzed 4 miliardw lat
Naukowcy zajmujący się badaniami powierzchni Marsa odkryli, że w niektrych ze znajdujących się tam skał mogą znajdować się ślady życia ukryte w minerałach - informuje serwis BBC News.
Fri, 30 Jul 2010 10:11:00 GMT
Rodzaj znieczulenia wpływa na ryzyko infekcji po operacji
Ryzyko miejscowej infekcji u pacjentw po operacji wymiany stawu biodrowego lub kolanowego, jest większe jeśli zastosowano znieczulenie oglne, a nie rdzeniowe lub zewnątrzoponowe - wynika z pracy, ktra ukaże się w sierpniowym wydaniu pisma "Anesthesiology".
Fri, 30 Jul 2010 09:22:00 GMT
Nowy akcelerator w CERN
Działający od niedawna, pod Genewą, słynny akcelerator LHC (Wielki Zderzacz Hadronw) ma kształt zamkniętej pętli. Tymczasem fizycy myślą już o budowie nowego przyspieszacza cząsteczek. Tym razem w kształcie linii prostej - informuje serwis "Physorg".
Thu, 29 Jul 2010 22:54:00 GMT
Wodowanie specjalistycznego statku
W Stoczni Gdańsk S.A. w piątek zostanie zwodowany specjalistyczny statek o nazwie "Fugro Symphony". Jednostka wyposażona m.in. w trzy dźwigi i lądowisko dla helikopterw służyć będzie obsłudze grnictwa morskiego.
Thu, 29 Jul 2010 22:50:00 GMT
Ciekawostki na Onet.pl
Inwazja papug na Brukselę
Zabytkowy rynek, Atomium, instytucje UE i pomnik siusiającego chłopca Manneken-Pis to szeroko znane atrakcje Brukseli. Mało kto jednak wie, że w stolicy Belgii żyje od lat na wolności jedna z największych w Europie, w dodatku stale rosnąca, populacja... papug.
Fri, 30 Jul 2010 09:18:00 GMT
Skanery ciała nie dość, że rozbierają, to jeszcze promieniują
Nowe skanery ciała, ktre wprowadzono niedawno na amerykańskich i niektrych brytyjskich lotniskach, mogą emitować znacznie większe dawki promieniowania, niż dotychczas sądzono.
Thu, 29 Jul 2010 22:15:00 GMT
Nowe, lecznicze właściwości pieprzu
Najnowsze badania dowodzą, że pieprz pomaga obniżyć ryzyko choroby serca. Naukowcy kanadyjscy rozpoczęli badania na grupie 200 osb, ktre przez miesiąc będą zażywać kapsułki zawierające 2,8 grama pieprzu dziennie.
Thu, 29 Jul 2010 22:14:00 GMT
Prehistoryczne stwory rozwijały skomplikowane cechy
Prehistoryczne stworzenia rozwijały bardzo skomplikowane cechy, aby przyciągać osobniki płci przeciwnej.
Thu, 29 Jul 2010 22:13:00 GMT
Wisiorek za 5 dolarw okazał się wart 10 tys. dolarw
Pewna mieszkanka Cleveland kupiła na garażowej wyprzedaży wisiorek z miniaturką koszulki koszykarza LeBrona Jamesa i dopiero po 5 latach odkryła jego prawdziwą wartość.
Thu, 29 Jul 2010 22:12:00 GMT

![[-x_{\max}, -x_{\min}] \cup \{0\} \cup [x_{\min}, x_{\max}]](http://upload.wikimedia.org/math/5/2/c/52c8771573d4165f5ac6d9823cd28bb3.png)








