Plovoucí desetinná čárka je další způsob, kterým lze desetinná čísla reprezentovat. 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á vymýšlí různé standardy a jeden z těchto standardů je 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, v každém procesoru.

Jak to funguje?

Každé desetinné číslo lze reprezentovat tímto vzorečkem:

Desetinné číslo = mantisa * 10exponent

Já si myslím, že tuto reprezentaci jste už někde určitě viděli na nějaké kalkulačce, i když nejste ajťáci a slovo “mantisa” vidíte poprvé. Je to 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ělena na další 3 hodnoty: znaménko, exponent a mantisa. Na obrázku níže je ukázka tohoto rozdělení na 64 bitech.

  • První bit je znaménko (ano, z toho plyne negativní a pozitivní nula, 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íte, že z toho plyne, že IEEE 754 podporuje kladnou a zápornou nulu.

Ajťáci z IEEE co to vymysleli si řekli, že bude jednodušší, aby se procesory nějak vypořádaly s kladnou a zápornou reprezentací nuly, než aby vymýšleli nějakou variantu „dvojkového doplňku“ pro desetinná čísla.

Tato prazvlášnost negativní a pozitivní nuly je zahlazena už v definici. Standard 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 -∞ a určuje, jak se s těmito hodnotami má nakládat při výpočtech s ostatními hodnotami.

Kladné a záporné NaN

NaN znamená “Not a Number”, jinými slovy: “Toto není platné číslo”.

Prostě hodnota, která reprezentuje “nesmysl” … ale ne jeden nesmysl ale dokonce kladný nebo záporný nesmysl. Tuto hodnotu lze získat při některých matematických operacích, například dělení nulou.

Pokud provedete dělení nulou u celých čísel tak procesor provede nad vaším programem přerušení a pokračuje v toku instrukcí, který buď nadefinoval programátor nebo operační systém. Při dělení nulou v kontextu desetinných čísel se ale přerušení neprovádí a místo toho se vrátí hodnota NaN.