IEEE 754

IEEE 754 (známý také jako IEC 60559, případně IEC 559) neboli Standard IEEE pro dvojkovou aritmetiku v pohyblivé řádové čárce (někdy též nesprávně v plovoucí desetinné čárce) je nejrozšířenější standard pro výpočty v pohyblivé řádové čárce, který používá mnoho mikroprocesorů a jednotek FPU. Standard definuje formáty pro reprezentaci čísel v pohyblivé desetinné čárce včetně záporné nuly, denormalizovaných čísel a zvláštních hodnot (kladné a záporné nekonečno, a „nečíslo“ – NaN).

Verze standardu

  • IEEE 754-1985 – byl poprvé implementován v koprocesoru Intel 8087
  • IEEE 754-2008 – rozšiřuje IEEE 754-1985; převzaly ho také ISO/IEC/IEEE 60559:2011
  • IEEE 754-2019 – rozšiřuje IEEE 754-2008; převzaly ho také ISO/IEC 60559:2020[1]

IEEE 754-1985 definuje čtyři formáty čísla pro: jednoduchou přesnost (single, 32 bitů), dvojnásobnou přesnost (double, 64 bitů), základní-rozšířenou přesnost (≥ 43-bitů, běžně se nepoužívá) a dvojitou-rozšířenou přesnost (≥ 79-bitů, obvykle se implementuje na 80 bitů). Pro implementaci standardu je vyžadována pouze základní přesnost, ostatní jsou volitelné.

IEEE 754-2008 rozšiřuje předchozí standard o čísla s poloviční a čtyřnásobnou přesností, dále doplňuje formáty pro práci s desítkovou aritmetikou v pohyblivé řádové čárce.

IEEE 754-2019 definuje nové operace: tanPi, aSinPi a aCosPi, došlo ke změnám operací min, max vlivem změny zacházení s hodnotou NaN a nulou se znaménkem. Měl by zachovávat dopřednou kompatibilitu pro IEEE 754-2008, ale mohou nastat odchylky pro operace: min, max, Num, NumMag vlivem jiného zacházení s hodnotou NaN.[2]

Tabulka formátů

FormátIEEE 754-1985základbitů celkembitů znaménkabitů exponentubitů mantisy(*)počet platných dekadických číslicmax. dekadický exponentpozn.
binary162161510+13.314.51poloviční přesnost, "Half"
binary32single2321823+17.2238.23základní přesnost
binary64double26411152+115.95307.95dvojitá přesnost
extended(x86)2801156419.264931.77rozšířená dvojitá přesnost
binary1282128115112+134.024931.77čtyřnásobná přesnost, "quadruple"
binary2562256119236+171.3478913.2osminásobná přesnost, "octuple"
decimal32(x)10321~8~23796základní přesnost
decimal64(x)10641~10~5316384dvojitá přesnost
decimal128(x)101281~13~114346144čtyřnásobná přesnost
(*) zápis např. 10+1b označuje, že mantisa je uložená 10bitově, přičemž se používá 1 "skrytý" bit
(x) každý decimální formát připouští dvě reprezentace, buď s využitím binárního kódování mantisy, nebo s využitím kódování DPD, kdy se 3 desítkové číslice zakódují do deseti bitů.

Reprezentovatelný rozsah čísel

Pokud převedeme rozsah exponentů a mantis do desítkové soustavy, dostaneme méně přesný, avšak lépe představitelný obraz možností binárních formátů čísel v plovoucí řádové čárce. Pokud FPU jednotka umí pracovat s denormalizovanými čísly, dochází ke zlepšení rozsahu v okolí nuly. Nejmenší denormalizované číslo je rovněž nejmenším "kvantem", po kterém se mohou měnit normalizovaná nebo denormalizovaná čísla v blízkosti nuly (tj. čísla s "nejzápornějším" exponentem).

Většinu destinných čísel nelze přesně převést do dvojkové soustavy. Při převodu pak vznikají periodická čísla, která nejsou v binárních formátech IEEE 754 reprezentovatelná. Např. (0,1)10 = (0,000 1100 1100 1100 ...)2. Protože mantisa má omezený počet číslic, je nevyhnutelné zaorkouhlení, kvůli kterému vzniká nepřesnost.

Formát
(IEEE 754-2008)
velikost mantisy(*)
(počet desítkových číslic mantisy)
reprezentovatelná

celá čísla(+)

největší kladné číslonejmenší kladné

normalizované číslo

nejmenší kladné

denormalizované číslo

binary16≈ 3,3 desítkových číslic+-211, tj.+-20486.55... × 1046.10... × 10−4≈ 6 × 10−8
binary32≈ 7,2 desítkových číslic+-224, tj. ≈ +-1,6×1073.402823... × 10381.17549... × 10−38≈ 1.4 × 10−45
binary64téměř 16 desítkových číslic+−253,tj. ≈ +-9×10151.79769... × 103082.22507... × 10−308≈ 5 × 10−324
binary128≈ 34 desítkových číslic+−2113, tj. ≈ +-10341.18973... × 1049323.36210... × 10−4932≈ 6,5 × 10−4966
(*) tento údaj nám pomáhá uvědomit si s jakou přesností pracujeme; např. přesnost zhruba "3,3 číslic" znamená "o trochu lepší přesnost výpočtů než se zaokrouhlováním na tři platné desítkové číslice"
(+) tento údaj reprezentuje rozsah, ve kterém lze bez ztráty přesnosti provést převod mezi celým číslem a číslem v plovoucí řádové čárce; vzhledem ke struktuře binárních formátů IEEE754 tento rozsah odpovídá velikosti mantisy

Základní přesnost (single, binary32)

Číslo v pohyblivé řádové čárce zabírá v přesnosti „single“ právě 32 bitů. Přitom je jeden bit vyhrazen pro určení znaménka, 8 bitů pro zakódování exponentu v aditivním kódování (také kód s posunutou nulou) a 23 bitů pro zakódování mantisy.

bit3130 29 … 24 2322 21 … 3 2 1 0
význams (znaménko)e (exponent)m (mantisa)

podrobněji rozepsáno:

bit313029242322213210
významse7e6e1e0m1m2m20m21m22m23

Pro reprezentovanou hodnotu "X" platí.

 X = (-1)s × 2E-127 × (1 + Q)

kde:

 E = 27 × e7 + 26 × e6 + … + 21 × e1 + e0
 Q = m1 × 2−1 + m2 × 2−2 + … + m22 × 2−22 + m23 × 2−23

Můžeme si povšimnout, že místo aby mantisa obsahovala bit m0, tak se k ní vždy přičítá jednička. Tento "skrytý bit" umožňuje efektivnější kódování a porovnávání. Díky absenci m0 je vyloučena možnost zakódovat stejné číslo mnoha různými způsoby. Současně bychom se tím však zbavili možnosti zakódovat číslo nula. Proto výše uvedený základní vzorec platí pouze když je E v mezích 1 až 254, hodnoty E=0 a E=255 jsou použity pro vyjádření speciálních případů, kdy nelze výsledek operace pomocí výše uvedeného vzorce zakódovat:

podmínkahodnotapoznámka
E = 1 až 254X = (-1)s × 2E-127 × (1 + Q)základní formát
E = 0, Q ≠ 0X = (-1)s × 2−126 × Qdenormalizovaná čísla
E = 0, Q = 0, s = 0X = 0kladná nula
E = 0, Q = 0, s = 1X = 0záporná nula
E = 255, Q = 0, s = 0X = +∞kladné nekonečno (výsledek byl příliš vysoký)
E = 255, Q = 0, s = 1X = −∞záporné nekonečno (výsledek byl příliš nízký)
E = 255, Q > 0X = NaNnení číslo

Ostatní dvojkové formáty

Ostatní formáty se základem 2 jsou řešeny obdobně jako základní přesnost, pouze jsou jiné počty bitů pro pole e a m

Desítkové formáty

Desítkové formáty se zatím běžně nepoužívají, standard navíc připouští dvě různé implementace, které mohou být u některých formátů i částečně funkčně odlišné. Tyto implementace se liší v kódování mantisy, které je buď binární anebo využívá schéma DPD pro zakódování tří desítkových číslic do deseti bitů.

Odkazy

Reference

  1. ISO/IEC 60559:2020 Information technology — Microprocessor Systems — Floating-Point arithmetic [online]. ISO.org, 2020-05 [cit. 2021-12-27]. Dostupné online. (anglicky) 
  2. ANSI/IEEE Std 754-2019 Changes in 754-2019 from ANSI/IEEE Std 754-2008 [online]. ieee.org [cit. 2021-12-27]. Dostupné online. (anglicky) 

Související články

Externí odkazy