IEEE 754: Porovnání verzí
- neex Kategorie:Standardy IEC |
m odebrána Kategorie:Informatika za použití HotCat |
||
Řádek 146: | Řádek 146: | ||
[[Kategorie:Standardy IEEE|754]] |
[[Kategorie:Standardy IEEE|754]] |
||
[[Kategorie:Standardy ISO]] |
[[Kategorie:Standardy ISO]] |
||
[[Kategorie:Informatika]] |
|||
[[Kategorie:Datové typy]] |
[[Kategorie:Datové typy]] |
Verze z 29. 4. 2013, 08:46
IEEE 754 je 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á v koprocesoru Intel 8087
- IEEE 754-2008 ... rozšiřuje IEEE 754-1985; převzaly ho také ISO/IEC/IEEE 60559:2011
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 plouvoucí řádově čárce.
IEEE 754-2008 | IEEE 754-1985 | bitů | základ | znaménko | exponent | mantisa | pozn. |
---|---|---|---|---|---|---|---|
binary16 | - | 16b | 2 | 1b | 5b | 10+1b(*) | poloviční přesnost, "Half" |
binary32 | single | 32b | 2 | 1b | 8b | 23+1b | základní přesnost |
binary64 | double | 64b | 2 | 1b | 11b | 52+1b | dvojitá přesnost |
- | extended | 80b | 2 | 1b | ? | ? | dvojitá rozšířená přesnost |
binary128 | - | 128b | 2 | 1b | 15b | 112+1b | čtyřnásobná přesnost |
decimal32(x) | - | 32b | 10 | 1b | -95 až +96 | 7 číslic | základní přesnost |
decimal64(x) | - | 64b | 10 | 1b | -383 až +384 | 16 číslic | dvojitá přesnost |
decimal128(x) | - | 128b | 10 | 1b | -6143 až +6144 | 34 číslic | čtyřnásobná přesnost |
- (*) zápis 10+1b označuje že mantissa je uložná 10 bitově 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ů.
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í a 23 bitů pro zakódování mantisy.
bit | 31 | 30 29 … 24 23 | 22 21 … 3 2 1 0 |
---|---|---|---|
význam | s (znaménko) | e (exponent) | m (mantisa) |
podrobněji rozepsáno:
bit | 31 | 30 | 29 | … | 24 | 23 | 22 | 21 | ... | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
význam | s | e7 | e6 | … | e1 | e0 | m1 | m2 | ... | m20 | m21 | m22 | m23 |
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ínka | hodnota | poznámka |
---|---|---|
E = 1 až 254 | X = (-1)s × 2E-127 × (1 + Q) | základní formát |
E = 0, Q ≠ 0 | X = (-1)s × 2-126 × Q | denormalizovaná čísla |
E = 0, Q = 0, s = 0 | X = 0 | kladná nula |
E = 0, Q = 0, s = 1 | X = 0 | záporná nula |
E = 255, Q = 0, s = 0 | X = +∞ | kladné nekonečno (výsledek byl příliš vysoký) |
E = 255, Q = 0, s = 1 | X = -∞ | záporné nekonečno (výsledek byl příliš nízký) |
E = 255, Q > 0 | X = NaN | není čí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ů.