Pohyblivá řádová čárka

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 sekundu).

Úvod

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×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

,

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á

,

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 jednoduchou 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[1] a může se uvolněné místo použít pro extra bit přesnosti. K výpočtu z této reprezentace lze použít:

, 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.


Způsoby ukládání čísel v plovoucí desetinné čárce

V počítačových systémech se využívá toho, že vybraná podmnožina reálných čísel může být vyjádřena jako

XFP = (-1)S × bexponent-bias × m

V různých počítačových systémech se používají různé báze, a různé reprezentace mantisy a exponentu:[2]

Počítač/norma/systémŠířka (b)BázeExponent (b)Mantisa (b)Nejmenší čísloNejvětší čísloPočet platných míst
IEEE 754 half162510+1[p 1]
IEEE 754 single322823+1[p 1]1,17×10−383,40×10387
IEEE 754 double6421152+1[p 1]2,22×10−3081,79×1030816
IEEE 754 double extended8021564
IEEE 754 quadruple128215112+1[p 1]
IEEE 754 octuple256219236+1[p 1]
IBM řady 7×x362827
IBM 360 single3216724
IBM 360 double6416756
HP 3000 single322922
HP 3000 double642954
CDC 6000, 66006021148+1[p 1]
Cray-164215483,67×10−24662,73×10246515
Strela4327351,8×10−191,8×1019
Apple II402831+1[p 1]
ZX Spectrum402831+1[p 1]4×10−391038
Atari (FP rutiny)48100[p 2]740
Turbo Pascal real482839

V počítačích IBM 704 je číslo uloženo jako[2]

bit3534 - 2726 - 0
významznaménkoexponentmantisa

Počítače řady BM 1400 ukládají čísla v BCD kódu, kdy jsou jednotlivé číslice ukládány v bytu ve tvaru

C B A 8 4 2 1 M

kdy bity 8 - 1 nesou vlastní hodnotu číslice, bity A a B sloužící pro rozšíření množství dat jsou nulové, C je paritní bit (používá se lichá parita) a M označuje zda se jedná o poslední číslici čísla.[2] Ruský počítač Strela umožňue ukládat čísla jak v binárním formátu, tak v BCD formátu.

binární formátbit01 - 353637 - 42
významznaménko mantisyabsolutní hodnota mantisyznaménko exponentuexponent
BCD formátbit01 - 363738 - 42
významznaménko mantisyabsolutní hodnota mantisyznaménko exponentuexponent

Při použití binárního formátu je přesnost čísla 10 - 11 desítkových číslic, BCD formátu pouze 9 desítkových číslic.[2]

V počítačích Cray-1 je číslo uloženo jako[2]

počet bitů111448
významznaménko mantisyznaménko exponentuexponentmantisa

Osmibitové počítače Atari ukládají čísla do šesti bajtů:[2]

byte012345
významznaménko + exponent2 BCD číslice2 BCD číslice2 BCD číslice2 BCD číslice2 BCD číslice

Datový typ real Turbo Pascalu pro čísla používá šest bytů:[2]

byte012345
významexponentmantisamantisamantisamantisaznaménko + mantisa

Jiné počítačové reprezentace necelých čísel

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 nebo zcela formálně bez převodu do cifer. Takové programy dokáží přesně spočítat výrazy jako , protože „rozumí“ matematice pod nimi.

Poznámky

  1. a b c d e f g h Hodnota mantisy je normalizována tak, aby její první bit byl vždy jedna, tento bit tak není nutné ukládat.[2] Tento bit se proto označuje jako skrytý nebo implicitní.[1]
  2. V [2] je v tabulce uvedeno 10, ale vlastní text popisující reprezentaci čísla v Atari BASICu zmiňuje číslo 100

Reference

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

  1. a b Floating Point Concepts (The GNU C Library). www.gnu.org [online]. [cit. 2021-09-30]. Dostupné online. ((anglicky)) 
  2. a b c d e f g h i TIŠNOVSKÝ, Pavel. Interní reprezentace numerických hodnot: od skutečného počítačového pravěku po IEEE 754–2008. Root.cz [online]. 22. 1. 2015. Dostupné online. ISSN 1212-8309. ((česky)) 

Externí odkazy