Nieskończoności pozwalają na kontynuowanie obliczeń w przypadku wyjścia poza możliwy do przedstawienia zakres liczb. Jeżeli uzyskamy oo w pośrednim kroku obliczeń, wynik końcowy może być dobrze zdefiniowaną liczbą zmiennoprzecinkową, ponieważ obowiązuje l/oo = 0.
Dziwić może trochę zero ze znakiem. Jednak dzięki temu zawsze spełniona będzie równość \/{\/x) = x dla x — ±oo. Gdyby zero pozbawione było znaku, spełnienie tej nierówności nie byłoby możliwe, ponieważ informacja o znaku byłaby tracona w pośrednich krokach obliczeń. Ponadto zero ze znakiem jest użyteczne w przypadku funkcji, które mają nieciągłości w zerze [31].
W celu zwiększenia dokładności obliczeń standard IEEE wprowadza również wartości zdenormalizowane, których mantysa nie posiada domyślnej części całkowitej 1. Liczby te mają wszystkie bity cechy równe 0 i przynajmniej jeden bit mantysy różny od zera. Bez wartości zdenormalizowanych najmniejsza co do modułu liczba różna od zera możliwa do przedstawienia w pojedynczej precyzji to ±1,1754 x 10-38, a w podwójnej precyzji - ±2,225 x 10-308. Liczby mniejsze od wartości granicznej w każdej precyzji traktowane byłyby jako 0. Dzięki wartościom zdenormalizowanym najmniejsze liczby to odpowiednio ±1,40 x 10-45 i ±4,94 x 10-324.
Przykład Aby oswoić się z formatem IEEE, znajdziemy 32-bitową reprezentację zmiennoprzecinkową liczby 5,375. W pierwszym kroku przekształcamy liczbę dziesiętną do postaci dwójkowej:
5,375 = 1 * 22 + 0 * 21 + 1 * 2° + 0 * 2_1 + 1 * 2-2 + 1 * 2-3 —> 101.011. Otrzymaną liczbę normalizujemy:
101.011 x 2° = 1.01011 x 22, a następnie pomijamy wiodącą jedynkę w mantysie 01011
i obliczamy wykładnik
2 + 127 = 129 10000001
Pozostaje nam tylko określenie bitu znaku, który w przypadku 5,375 wynosi 0 (liczba dodatnia). Reprezentacja naszej liczby ma postać:
znak |
wykładnik |
mantysa |
0 |
10000001 |
01011000000000000000000 |
C++
Programista C++ ma do dyspozycji trzy typy rzeczywiste, float, double i long double (patrz tabela 2.5). Odpowiadają one pojedynczej, podwójniej i rozszerzonej podwójnej precyzji w standardzie IEEE. Warto przy tym wiedzieć, że chociaż zmienna typu long double zajmuje 96 bitów, na komputerach 32-bitowych wykorzystywane jest tylko 80 z nich. Najmniejsze i największe wartości
19