Single (formát čísla v pohyblivé řádové čárce)
Počítačovou reprezentaci čísel v pohyblivé řádové čárce definuje standard IEEE 754. Ve speciálních případech nebo u velmi starého hardware se mohou vyskytnout i jiné formáty. Nejčastěji používanou reprezentací jsou čísla ve formátu „single“ (binary32 podle IEEE 754) a „double“ (binary 64 podle IEEE 754), tedy 32bitová a 64bitová čísla v plovoucí řádové čárce.
Formát binary32 v IEEE754
[editovat | editovat zdroj]Číslo je kódované dvojkově. Přesnost je lepší než 7 desítkových číslic, exponent je zhruba ±1038. Současný hardware většinou podporuje denormalizovaná čísla, takže nejmenší krok čísel okolo nuly je zhruba 1.4 × 10−45.
V počítačovém jazyce java odpovídá formátu binary32 elementární typ float.
Reprezentace
[editovat | editovat zdroj]Čí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.
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 |