Pohyblivá řádová čárka

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Ve výpočetní technice se pohyblivou řádovou čárkou nebo plovoucí řádovou čárkou rozumí způsob reprezentace čísel, která by byla moc malá nebo velká pro vyjádření v pevné řádové čárce. Čísla jsou obecně uložena jako určité množství platných číslic vynásobený exponentem. Základem exponentu bývá většinou 2, 10 nebo 16 (což odpovídá dvojkové, desítkové a šestnáctkové soustavě). Čísla, která mohou být v pohyblivé řádové čárce vyjádřena přesně, jsou ve tvaru:

platné číslice × základexponent

Název pohyblivá respektive plovoucí vznikl z toho, že se desetinná čárka (nebo v počítačích častěji „binární čárka“) pohybuje – je umístěna kdekoliv relativně k platným číslicím. Tato pozice je interně uložena separátně, proto může reprezentace plovoucí desetinnou čárkou být brána jako počítačová realizace vědecké notace. V průběhu času se používalo několik různých systémů počítačové reprezentace plovoucí desetinné čárky, ale v posledních deseti letech se nejčastěji používá reprezentace definovaná standardem IEEE 754.

Výhodou reprezentace s plovoucí místo s pevnou desetinnou čárkou (popř. integery) je mnohem širší oblast hodnot: reprezentace s pevnou des. čárkou, která má sedm desítkových číslic a dvě desetinná místa, může vyjádřit čísla 12345,67, 123,45, 1,23 atd., zatímco reprezentace s plovoucí desetinnou čárkou (jako IEEE 754 formát Decimal32) se sedmi desítkovými čísly může vyjadřovat kromě toho 1,234567, 123456,7, 0,00001234567, 12345670000000 atd. Formát plovoucí desetinné čárky vyžaduje o trochu více paměti (k zakódování pozice desetinné čárky), proto při uložení ve stejném prostoru mají čísla s plovoucí desetinnou čárkou menší rozsah, ale větší přesnost než čísla s čárkou pevnou.

Rychlost operací prováděných s čísly s plovoucí desetinnou čárkou je důležitým měřítkem rychlosti počítačů v mnoha oblastech. Měří se v jednotce FLOPS (operace s plov. des. čárkou za vteřinu).

Úvod[editovat | editovat zdroj]

Reprezentace čísel specifikuje způsob uložení čísla tak, aby mohlo být zakódováno jako řetězec číslic. Aritmetika je definována jako sada operací nad touto reprezentací, která simuluje klasické matematické operace.

Je několik mechanismů, kterými může řetězec číslic reprezentovat čísla. V běžné matematické notaci může být řetězec libovolně dlouhý a umístění desetinné čárky je explicitně označeno vložením čárky (resp. tečky). Je-li vynechána, předpokládá se, že leží přímo napravo od poslední (nejméně významné) číslice. V systémech s pevnou desetinnou čárkou je pozice desetinné čárky pevně dána konvencí, například říká-li konvence, že desetinná čárka leží uprostřed osmiciferného zápisu, zápis „00012345“ by vyjadřoval hodnotu 1,2345.

Ve vědecké notaci se čísla vyjadřují dvěma složkami: mantisou a exponentem. Hodnota zápisu X×10Y je pak X krát deset na Y. Mantisa se obvykle volí tak, aby ležela mezi 1 a 10. Například perioda otáčení Io, měsíce Jupitera, je 152 853,5047 sekund. Tato doba je ve vědecké notaci vyjádřena jako 1,528535047×105 sekund.

Reprezentace v plovoucí desetinné čárce je podobná konceptu vědecké notace. Číslo s plovoucí desetinnou čárkou je rozděleno na:

  • Řetězec cifer o daném základu se znaménkem, označovaný jako mantisa nebo koeficient. Desetinná čárka není obsažena – předpokládá se, že leží v určité pozici, často přímo za nejvýznamnější číslicí nebo napravo od nejméně významné číslice. Tento článek bude obecně následovat první z těchto konvencí. Délka mantisy udává přesnost čísla.
  • Integer se znaménkem označovaný jako exponent, charakteristika nebo škála, který určuje velikost čísla.

Mantisa je vynásobena základem soustavy umocněným na exponent, což odpovídá posunutí desetinné čárky z její původní pozice v mantise o počet míst odpovídající hodnotě exponentu: doprava, je-li exponent kladný, doleva, je-li záporný.

V soustavě o základu 10 (obvyklé desítkové soustavě) uvedeme tento příklad: Číslo 152853,5047, které má deset desítkových cifer přesnosti, je reprezentováno s mantisou 1528535047 a exponentem 5 (s předpokládanou původní polohou desetinné čárky hned za nejvýznamnější číslicí mantisy, zde 1). K získání původní hodnoty se umístí desetinná čárka za nejvýznamnější číslici mantisy a výsledek se vynásobí 105, z čehož se získá 1,528535047 x 105, neboli 152853,5047. Není potřeba ukládat základ soustavy (10), protože bude shodný pro všechna použitá čísla. Někdy se také používá zápis 1.528535047 E 5, kde E znamená „krát deset na“.

Zapsáno v symbolech je výsledná hodnota

m \times z^e,

kde m je mantisa (včetně jejího předpokládaného umístění des. čárky), z je základ soustavy a e exponent.

Toto odpovídá

\frac{m}{z^{p-1}} \times z^e,

kde m je hodnota mantisy bez předpokládané desetinné čárky a p je přesnost – množství cifer v mantise.

Historicky se používaly různé základy čísel s plovoucí desetinnou čárkou, přičemž nejčastější je 2 (dvojková soustava), dále 10 (desítková soustava) a různé další, méně časté varianty (například 16 – šestnáctková soustava). Čísla s plovoucí desetinnou čárkou jsou racionální, protože mohou být vyjádřeny jako podíl dvou celých čísel, avšak základ soustavy určuje reprezentovatelné zlomky – například 1/5 nemůže být přesně vyjádřena jako číslo s plovoucí des. čárkou se základem 2, ale může být tak vyjádřeno se základem 10.

Způsob, jakým jsou mantisa, exponent a znaménkový bit uloženy v počítači, je závislý na implementaci. Obvyklé IEEE formáty jsou detailně popsány dále a jinde, ale například binární číslo s jednotlivou přesností (32-bit) je p rovno 24, proto je mantisa řetězec 24 bitů (jedniček nebo nul). Například prvních 33 bitů čísla je 11001001 00001111 11011010 10100010 0. Zaokrouhlení na 24 bitů znamená přiřazení hodnoty 25. bitu do 24. bitu, tedy 11001001 00001111 11011011. Při uložení v kódování IEEE 754 se z tohoto stane mantisa m s e = 1 (při e = 0 se předpokládá, že m má desetinnou čárku hned za první číslicí – zde 1). Protože první bit binární mantisy je vždy jedna, není nutné jej ukládat a může se uvolněné místo použít pro extra bit přesnosti. K výpočtu pí z této reprezentace lze použít:

\left( 1+\sum_{n=1}^{p-1} \text{bit}_n\times 2^{-n} \right) \times 2^e
= \left( 1+1\times 2^{-1}+0\times 2^{-2}+1\times 2^{-4}+1\times2^{-7}+\dots +1\times 2^{-23} \right) \times 2^1
= 1.5707964\times 2

, kde n je n-tý zleva normalizovaný bit mantisy. Normalizace, která je obrácena když se vrací zpět odebraná 1, může být brána jako forma komprese: umožňuje kompresi binární mantisy do o 1 bit menšího prostoru za cenu větší výpočetní náročnosti.

Jiné počítačové reprezentace necelých čísel[editovat | editovat zdroj]

Reprezentace pomocí plovoucí desetinné čárky, obzvláště ve standardním formátu IEEE, je zdaleka nejobvyklejší způsob ukládání přibližných hodnot reálných čísel v počítačích, protože většina počítačových procesorů s ním dokáže efektivně pracovat. Existují ale tyto alternativy:

  • Aritmetika s pevnou desetinnou čárkou používá hardwarové operace vyhrazené pro celá čísla se softwarovou implementací konkrétní konvence o pozici desetinné čádky, například 6 bitů nebo jiných cifer zprava. Hardware k výpočtům s touto reprezentací je levnější než hardware k výpočtům s plovoucí čárkou. Pevná čárka se používá většinou ve speciálních aplikacích, jako například mikroprocesory, které obsahují pouze instrukce pro aritmetiku celých čísel.
  • BCD kódování ukládá samostatně jednotlivé desítkové číslice do jednotlivých binárních čísel (tedy 4 bity na 1 desítkovou číslici).
  • Logaritmický číselný systém ukládá každé číslo jako logaritmus jeho absolutní hodnoty a znaménkový bit. Distribuce hodnot je podobná jako u plovoucí desetinné čárky, ale křivka vyjadřující závislost reprezentací na hodnotách je na rozdíl od plovoucí des. čárky spojitá (kromě nuly). Na rozdíl od plovoucí desetinné čárky je jednoduché implementovat násobení a dělení, ale sčítání a odečítání je mnohem obtížnější.
  • Když je potřeba větší přesnost, lze implementovat plovoucí desetinnou čárku přímo do mantisy (a někdy i do exponentu), čímž vznikne aritmetika s libovolnou přesností.
  • Některá čísla (např. 1/3 nebo 0.1) nemohou být v binární plovoucí des. čárce vyjádřena přesně. Software, který používá racionální aritmetiku, ukládá čísla jako zlomky s celým čitatelem a jmenovatelem, proto dokáže přesně reprezentovat libovolné racionální číslo. Takový software většinou potřebuje využívat aritmetiku velkých čísel.
  • Systémy počítačové algebry jako Mathematica nebo Maxima dokáží zpracovávat iracionální čísla jako \pi nebo \sqrt{3} zcela formálně bez převodu do cifer. Takové programy dokáží přesně spočítat výrazy jako \sin 3\pi, protože „rozumí“ matematice pod nimi.

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Floating point na anglické Wikipedii.