Binarna liczba całkowita dziesiętna
Formaty zmiennoprzecinkowe |
---|
IEEE 754 |
|
Inny |
Standard IEEE 754-2008 obejmuje dziesiętne formaty liczb zmiennoprzecinkowych, w których mantysa i wykładnik (oraz ładunki NaN ) mogą być kodowane na dwa sposoby, określane jako kodowanie binarne i kodowanie dziesiętne .
Oba formaty dzielą liczbę na bit znaku s , wykładnik q (między q min a q max ) i cyfrę p znaczącą c (między 0 a 10 p -1). Zakodowana wartość to (−1) s × 10 q × c . W obu formatach zakres możliwych wartości jest identyczny, różnią się jednak sposobem reprezentacji mantysy c . W kodowaniu dziesiętnym jest on kodowany jako seria p cyfr dziesiętnych (przy użyciu gęsto upakowanego kodowania dziesiętnego (DPD)). To sprawia, że konwersja do postaci dziesiętnej jest wydajna, ale do przetworzenia wymaga specjalistycznej dziesiętnej jednostki ALU . W binarnym kodowaniu całkowitym dziesiętnym ( BID ) jest to kodowane jako liczba binarna.
Format
Korzystając z faktu, że 2 10 = 1024 to tylko trochę więcej niż 10 3 = 1000, 3 n -cyfrowe liczby dziesiętne można skutecznie upakować w 10 n bitów binarnych. Jednak formaty IEEE mają mantysy 3 n +1 cyfr, co generalnie wymagałoby 10 n +4 bitów binarnych do reprezentacji.
Nie byłoby to wydajne, ponieważ potrzebnych jest tylko 10 z 16 możliwych wartości dodatkowych 4 bitów. Bardziej wydajne kodowanie można zaprojektować, wykorzystując fakt, że zakres wykładników ma postać 3 × 2 k , więc wykładnik nigdy nie zaczyna się od 11
. Używając kodowania Decimal32 (z mantysą 3*2+1 cyfr dziesiętnych) jako przykładu ( e
oznacza wykładnik, m
mantysę, czyli mantysę):
- Jeśli mantysa zaczyna się od
0mmm
, pominięcie wiodącego bitu 0 pozwala zmieścić mantysę w 23 bitach:
s 00eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 01eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 10eeeeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm
- Jeśli mantysa zaczyna się od
100m
, pominięcie początkowych 100 bitów pozwala zmieścić mantysę w 21 bitach. Wykładnik jest przesunięty o 2 bity, a11
bitów pokazuje, że używana jest ta postać:
s 1100eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1101eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1110eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
- Nieskończoność, cichy NaN i sygnalizacja NaN użyj kodowań rozpoczynających się na literę
s 1111
:
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxxx s 111110 xxxxxxxxxxxxxxxxxxxxxxxxx s 111111 xxxxxxxxxxxxxxxxxxxxxxxxx
Bity pokazane w nawiasach są niejawne : nie są zawarte w 32 bitach kodowania Decimal32, ale są implikowane przez dwa bity po bicie znaku.
Kodowania Decimal64 i Decimal128 mają większe pola wykładników i znaczących, ale działają w podobny sposób.
W przypadku kodowania Decimal128 113 bitów znaczenia wystarcza w rzeczywistości do zakodowania 34 cyfr dziesiętnych, a druga postać nigdy nie jest wymagana.
Kohorta
Dziesiętna liczba zmiennoprzecinkowa może być zakodowana na kilka sposobów, różne sposoby reprezentują różne precyzje, na przykład 100,0 jest kodowane jako 1000×10-1 , podczas gdy 100,00 jest kodowane jako 10000× 10-2 . Zbiór możliwych kodowań o tej samej wartości liczbowej nazywany jest w standardzie kohortą . Jeśli wynik obliczeń jest niedokładny, największa ilość znaczących danych zostaje zachowana poprzez wybranie elementu kohorty z największą liczbą całkowitą, jaką można zapisać w mantysach wraz z wymaganym wykładnikiem.
Zakres
Proponowany standard IEEE 754r ogranicza zakres liczb do mantysy postaci 10 n -1, gdzie n to liczba całych cyfr dziesiętnych, które można zapisać w dostępnych bitach, aby zaokrąglenie dziesiętne było wykonane poprawnie.
32-bitowy | 64-bitowy | 128 bitów | |
---|---|---|---|
Bity pamięci | 32 | 64 | 128 |
Końcowe znaczące bity | 20 | 50 | 110 |
Znaczące bity | 23/24 | 53/54 | 113 |
Cyfry znaczące | 7 | 16 | 34 |
Bity kombinowane | 11 | 13 | 17 |
Bity wykładników | 8 | 10 | 14 |
Stronniczość | 101 | 398 | 6176 |
standardowy emax | 96 | 384 | 6144 |
Standardowy emin | −95 | −383 | −6143 |
Wydajność
Kodowanie binarne jest z natury mniej wydajne w przypadku konwersji do lub z danych zakodowanych dziesiętnie, takich jak ciągi znaków ( ASCII , Unicode itp.) i BCD . Dlatego najlepiej wybrać kodowanie binarne tylko wtedy, gdy dane są binarne, a nie dziesiętne. IBM opublikował niezweryfikowane dane dotyczące wydajności.
Zobacz też
Dalsza lektura
- Savard, John JG (2018) [2007]. „Dziesiętny standard zmiennoprzecinkowy” . czworokąt . Zarchiwizowane od oryginału w dniu 2018-07-03 . Źródło 2018-07-16 .