IEEE 754
IEEE 754, neboli Standard IEEE pro dvojkovou aritmetiku v pohyblivé řádové čárce (někdy též nesprávně v plovoucí desetiné čá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).
IEEE 754 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é.
Obsah |
[editovat] Jednoduchá přesnost (single precision)
Číslo v pohyblivé řádové čárce zabírá v přesnosti „single“ právě 32 bitů. Přitom je jeden bit vyhražen pro určení znaménka, 8 bitů pro zakódování exponentu 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 |