Standard IEEE 754 Liczby zmiennoprzecinkowe
Standard IEEE dotyczący arytmetyki zmiennoprzecinkowej (IEEE 754) to standard techniczny dotyczący obliczeń zmiennoprzecinkowych, ustanowiony w 1985 r. Instytut Inżynierów Elektryków i Elektroników (IEEE) . Standard rozwiązał wiele problemów występujących w różnych implementacjach zmiennoprzecinkowych, które utrudniały ich niezawodne użycie i ograniczały ich przenośność. Standard IEEE 754 zmiennoprzecinkowy jest obecnie najpowszechniejszą reprezentacją liczb rzeczywistych na komputerach, w tym komputerach PC i Mac z procesorami Intel oraz większości platform Unix.
Istnieje kilka sposobów przedstawiania liczb zmiennoprzecinkowych, ale w większości przypadków najbardziej efektywny jest standard IEEE 754. IEEE 754 składa się z 3 podstawowych elementów:
- Znak Mantysy –
To jest tak proste, jak nazwa. 0 oznacza liczbę dodatnią, a 1 oznacza liczbę ujemną. - Wykładnik stronniczy –
Pole wykładnicze musi reprezentować zarówno wykładniki dodatnie, jak i ujemne. Do rzeczywistego wykładnika dodawane jest odchylenie, aby uzyskać zapisany wykładnik. - Znormalizowana mantysa –
Mantysa jest częścią liczby w notacji naukowej lub liczby zmiennoprzecinkowej, składającej się z cyfr znaczących. Tutaj mamy tylko 2 cyfry, tj. O i 1. Zatem znormalizowana mantysa to taka, która ma tylko jedną 1 na lewo od przecinka.
Liczby IEEE 754 są podzielone na dwie części w oparciu o powyższe trzy składniki: pojedynczą precyzję i podwójną precyzję.
| TYPY | PODPISAĆ | WYKŁADNIK OBRĘCZONY | ZNORMALIZOWANA MANTYSA | STRONNICZOŚĆ |
|---|---|---|---|---|
| Pojedyncza precyzja | 1 (31-szy bit) | 8(30-23) | 23(22-0) | 127 |
| Podwójna precyzja | 1 (63-ty bit)
| 11(62-52) | 52(51-0) | 1023 |
Przykład -
85.125 85 = 1010101 0.125 = 001 85.125 = 1010101.001 =1.010101001 x 2^6 sign = 0 1. Single precision: biased exponent 127+6=133 133 = 10000101 Normalised mantisa = 010101001 we will add 0's to complete the 23 bits The IEEE 754 Single precision is: = 0 10000101 01010100100000000000000 This can be written in hexadecimal form 42AA4000 2. Double precision: biased exponent 1023+6=1029 1029 = 10000000101 Normalised mantisa = 010101001 we will add 0's to complete the 52 bits The IEEE 754 Double precision is: = 0 10000000101 0101010010000000000000000000000000000000000000000000 This can be written in hexadecimal form 4055480000000000
Wartości specjalne: IEEE zarezerwowało pewne wartości, które mogą być niejednoznaczne.
- Zero –
Zero to specjalna wartość oznaczona wykładnikiem i mantysą 0. -0 i +0 to różne wartości, chociaż obie są równe. - zdenormalizowany –
Jeśli wykładnik składa się wyłącznie z zer, ale mantysa nie, wówczas wartość jest liczbą zdenormalizowaną. Oznacza to, że ta liczba nie ma początkowej jedynki przed kropką binarną. - Nieskończoność -
Wartości +infinity i -infinity są oznaczone wykładnikiem wszystkich jedynek i mantysą wszystkich zer. Bit znaku rozróżnia nieskończoność ujemną i nieskończoność dodatnią. Operacje na wartościach nieskończonych są dobrze zdefiniowane w IEEE. - To nie jest liczba (NAN) –
Wartość NAN jest używana do reprezentowania wartości będącej błędem. Jest to reprezentowane, gdy pole wykładnika składa się wyłącznie z jedynek z bitem znaku zerowego lub mantysą oznaczającą, że nie jest to 1, po której następują zera. Jest to specjalna wartość, której można użyć do oznaczenia zmiennej, która nie posiada jeszcze wartości.
| WYKŁADNIK POTĘGOWY | MANTYSA | WARTOŚĆ |
|---|---|---|
| 0 | 0 | dokładnie 0 |
| 255 | 0
| Nieskończoność |
| 0 | nie 0 | zdenormalizowany |
| 255 | nie 0
| To nie jest liczba (NAN) |
Podobnie dla podwójnej precyzji (po prostu zastępując 255 przez 2049), zakresy liczb zmiennoprzecinkowych:
| Zdenormalizowany | Znormalizowany | Przybliżony dziesiętny | |
|---|---|---|---|
| Pojedyncza precyzja | ±2 -149 do (1 – 2 -23 )×2 -126 | ±2 -126 do (2 – 2 -23 )×2 127 | ± około 10 -44,85 do około 10 38,53 |
| Podwójna precyzja | ±2 -1074 do (1 – 2 -52 )×2 -1022 | ±2 -1022 do (2 – 2 -52 )×2 1023 | ± około 10 -323,3 do około 10 308.3 |
Zakres dodatnich liczb zmiennoprzecinkowych można podzielić na liczby znormalizowane i liczby zdenormalizowane, które wykorzystują tylko część precyzji ułamków. Ponieważ każda liczba zmiennoprzecinkowa ma odpowiadającą, zanegowaną wartość, powyższe zakresy są symetryczne wokół zera.
Istnieje pięć różnych zakresów liczbowych, których liczby zmiennoprzecinkowe o pojedynczej precyzji nie są w stanie przedstawić w przedstawionym dotychczas schemacie:
- Liczby ujemne mniejsze niż – (2 – 2 -23 ) × 2 127 (przepełnienie ujemne)
- Liczby ujemne większe od – 2 -149 (ujemny niedomiar)
- Zero
- Liczby dodatnie mniejsze niż 2 -149 (dodatni niedomiar)
- Liczby dodatnie większe niż (2 – 2 -23 ) × 2 127 (przepełnienie dodatnie)
Przepełnienie ogólnie oznacza, że wartości stały się zbyt duże, aby można je było przedstawić. Niedomiar jest mniej poważnym problemem, ponieważ oznacza po prostu utratę precyzji, która z pewnością będzie bliska zeru.
Tabela całkowitego efektywnego zakresu skończonych liczb zmiennoprzecinkowych IEEE jest pokazana poniżej:
| Dwójkowy | Dziesiętny | |
|---|---|---|
| Pojedynczy | ± (2 – 2 -23 ) × 2 127 | około ± 10 38,53 |
| Podwójnie | ± (2 – 2 -52 ) × 2 1023 | około ± 10 308,25 |
Operacje specjalne -
| Operacja | Wynik |
|---|---|
| n ÷ ± Nieskończoność | 0 |
| ±Nieskończoność × ±Nieskończoność | ± Nieskończoność |
| ±nieZero ÷ ±0 | ± Nieskończoność |
| ±skończona × ±nieskończoność | ± Nieskończoność |
| Nieskończoność + Nieskończoność Nieskończoność – -Nieskończoność | +Nieskończoność |
| -Nieskończoność – Nieskończoność -Nieskończoność + – Nieskończoność | - Nieskończoność |
| ±0 ÷ ±0 | NaN |
| ±Nieskończoność ÷ ±Nieskończoność | NaN |
| ± Nieskończoność × 0 | NaN |
| NaN == NaN | FAŁSZ |