Single (formát čísla v pohyblivé řádové čárce)

Z Wikipedie, otevřené encyklopedie

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