Plovoucí desetinná čárka

V minulém díle jsem pojmenoval jeden způsob, „kód“, jakým lze reprezentovat desetinná čísla v počítačích – fixní desetinná čárka. Tento způsob se v počítačích ale nepoužívá, protože nelze rozumně odhadnout, jaký by měl být poměr mezi celou a desetinnou částí.

Plovoucí desetinná čárka je další způsob, „kód“. Už z názvu je jasné, že rozdělení na celou a desetinnou část není fixní ale plovoucí nebo proměnlivé.

IEEE 754

IEEE je organizace v USA která vymejšlí různý standardy a jeden z těchto standardů je „kód“ na plovoucí desetinnou čárku s názvem IEEE 754.

Tento způsob vyjádření desetinných čísel s používá v počítačích dodnes.

Jak to funguje?

Mno, vychází to z jedný matematický rovnice: každé desetinné číslo lze reprezentovat tímto vzorečkem:

Desetinné číslo = mantisa * 10exponent

Já si myslím, že tuhle reprezentaci jsi už někde určitě viděl na nějaké kalkulačce, i když nejsi ajťák a slovo „mantisa“ vidíš poprvé. Je to strašně jednoduchá rovnice.

1,2345 = 12345 * 10-4

Hodnota desetinného čísla IEEE 754 se ukládá buď do 32 nebo 64 bitů a je rozděleno na 3 hodnoty: znaménko, exponent a mantisa. Na obrázku níže je ukázka tohoto rozdělení na 64 bitech.

64-bitové desetinné číslo dle IEEE 754
Zdroj: Wikipedia
  • První bit je znaménko (ano, to znamená negativní i pozitivní nulu, viz. níže)
  • Dalších 11 bitů je exponent
  • Zbylých 52 bitů je mantisa

Podivné hodnoty, se kterými IEEE 754 počítá

Kladná a záporná nula

První bit je znaménko! Z předchozích kapitol už víš, že z toho plyne, že IEEE 754 podporuje kladnou a zápornou nulu.

Ajťáci co to vymejšleli si nejspíš řekli „A tak proč ne kurva“. Nejspíš si řekli, že u desetinných čísel je jednodušší se nějak vypořádat s kladnou či zápornou nulou, než vymýšlet obdobu dvojkového doplňku pro desetinná čísla.

Tato prazvlášnost negativní a pozitivní nuly je však zahlazena: IEEE 754 narovinu říká, že záporná a kladná nula se mají chovat naprosto stejně, jako kdyby to byla jen jediná nula.

Kladné a záporné nekonečno

IEEE 754 obsahuje reprezentaci kladného nekonečna +∞ a záporného nekonečna -∞.

Kladné a záporné NaN

NaN znamená „Not a Number“, jinými slovy: „Tohle není platný číslo“. Prostě hodnota, která reprezentuje „nesmysl“….ale ne jeden nesmysl ale dokonce kladnej nebo zápornej „nesmysl“.

Tuhle hodnotu lze získat při některých matematických operacích, například dělení nulou.

Pokud provedeš dělení nulou u celých čísel tak procesor sám nad sebou provede přerušení: v takovém případě procesor spustí nebo čeká instrukce, který tohle přerušení mají obsloužit. IEEE ale v těchto případech přerušení neprovádí a místo toho vrátí hodnotu NaN.

Shrnutí

  • Počítače pracují s desetinnými čísly pomocí plovoucí desetinné čárky přes standard který se jmenuje IEEE 754
  • IEEE 754 ukládá desetinné číslo do 3 částí: znaménko, mantisa a exponent.
  • IEEE 754 umí pracovat s „podivnými“ hodnotami:
    • Kladná a záporná nula
    • Kladné a záporné nekonečno
    • Kladné a záporné NaN — NaN znamená „Není číslo“ nebo „Nesmysl“ které může vzniknout po operacích jako je dělení nulou