pi_05.pdf
(
587 KB
)
Pobierz
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
Politechnika Białostocka
Wydział Elektryczny
Katedra Elektrotechniki Teoretycznej i Metrologii
Spis treści
1. Wstęp.............................................................................................................3
2. Ogólna postać zapisu liczb zmiennoprzecinkowych .................................3
2.1. Dwójkowy zapis zmiennoprzecinkowy.....................................................5
2.2. Dziesiętny zapis zmiennoprzecinkowy ....................................................6
3. Dostępne formaty reprezentacji liczb..........................................................7
4. Informacje o binarnym kodowaniu liczb.....................................................8
5. Zakres reprezentowanych wartości...........................................................11
5.1. Zakres i precyzja reprezentacji liczb......................................................11
5.2. Sygnalizowane błędy.............................................................................13
6. Błędy obliczeń zmiennoprzecinkowych....................................................13
6.1. Błąd obliczania sumy i róŜnicy...............................................................14
6.2. Błąd obliczania iloczynu i ilorazu ...........................................................15
7. Zadania do wykonania................................................................................16
7.1. Liczby rzeczywiste i liczby maszynowe .................................................16
7.2. Określenie sposobu kodowania danych ................................................19
7.3. Obliczenia przebiegu funkcji..................................................................20
7.4. Operacje na liczbach małych i duŜych...................................................21
7.5. Obliczenia wielomianów ........................................................................23
7.6. Obliczenia iloczynu skalarnego .............................................................25
8. Informacje o dostępnych programach ......................................................27
9. Przykładowe zagadnienia na zaliczenie ....................................................28
10. Literatura .....................................................................................................29
11. Wymagania BHP .........................................................................................30
Instrukcja do zajęć
Podstawy informatyki
pracownia specjalistyczna
Tytuł ćwiczenia
STANDARD IEEE 754
PRZETWARZANIE LICZB ZMIENNOPRZECINKOWYCH
Numer ćwiczenia
PI05
Autor:
Bogusław Butryło
_____________
Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB.
© Wydział Elektryczny, Politechnika Białostocka, 2012
Białystok 2012
Wszelkie prawa zastrzeŜone. śadna część tej publikacji nie moŜe być kopiowana i odtwarzana w
jakiejkolwiek formie i przy uŜyciu jakichkolwiek środków bez zgody posiadacza praw autorskich.
2
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
1. Wstęp
Zasady
komputerowej
reprezentacji
i
przetwarzania
liczb
zmiennoprzecinkowych zostały sprecyzowane w standardzie IEEE 754. Jego
pierwsza wersja (IEEE 754-1985) została opublikowana w roku 1985. Modyfikację i
rozszerzenie standardu przedstawiono w roku 2008. Standard IEEE 754.2008,
opracowany przez IEEE (ang.
Institute of Electrical and Electronics Engineers)
został potwierdzony w specyfikacji standardu ISO 60559:2011 podanej przez
International Standard Organization.
W ramach standardu IEEE 754-2008 określone są m.in.:
•
zasady zapisu liczb zmiennoprzecinkowych przy uwzględnieniu, Ŝe tworzony
zapis bazuje na reprezentacji dwójkowej lub dziesiętnej;
•
zasady zapisu liczb w postaci znormalizowanej oraz zdenormalizowanej;
•
dostępne formaty reprezentacji danych zmiennoprzecinkowych;
•
zasady reprezentacji binarnej (niskopoziomowej) liczb;
•
sposoby zapisu / sygnalizacji podstawowych
obliczeniami zmiennoprzecinkowymi;
błędów
związanych
z
•
dwójkowej reprezentacji zmiennoprzecinkowej (BFP, ang.
binary floating-point),
w której wpisana liczba jest przetwarzana na zapis dwójkowy (baza systemu
B=2)
wpisana liczba
X
10
754
IEEE
→
−
fl
(
X
2
)
=
(
−
1
)
⋅
M
2
⋅
2
W
2
,
S
(2)
•
dziesiętnej reprezentacji zmiennoprzecinkowej (DFP, ang.
decimal floating
point)
w której bazą
B
systemu jest liczba 10
wpisana liczba
X
10
754
IEEE
→
−
fl
(
X
10
)
=
(
−
1
)
⋅
M
10
⋅
10
W
10
.
S
(3)
•
zasady realizacji podstawowych operacji matematycznych na liczbach
zmiennoprzecinkowych, w tym reguły zaokrąglania liczb maszynowych.
2. Ogólna postać zapisu liczb zmiennoprzecinkowych
Liczby rzeczywiste, wprowadzane do komputera w zapisie dziesiętnym,
podlegają automatycznemu przetworzeniu do jednej z postaci przewidzianych w
standardzie IEEE 754-2008. Ogólna postać zapisu liczb zmiennoprzecinkowych to
Obecnie podstawowym sposobem wewnętrznej reprezentacji liczb
zmiennoprzecinkowych w komputerach jest zapis BFP, z bazą
B=2.
Dominująca
liczba programów wykorzystuje zmiennoprzecinkową arytmetykę binarną.
Dziesiętny zapis zmiennoprzecinkowy (DFP) został wprowadzony do
standardu w roku 2008. Pozwala on rozszerzyć zakres reprezentowanych liczb.
Precyzja reprezentacji, podobnie jak w zapisie dwójkowym, jest ograniczona.
Wynika ona z dostępnej liczby cyfr znaczących mantysy, czyli z długości
reprezentacji komputerowej liczb (liczby bajtów potrzebnych na zapis całej liczby).
Zapis dziesiętny eliminuje błędy związane z transformacją liczb dziesiętnych na
system dwójkowy. W dalszej kolejności moŜliwe jest w ten sposób ograniczenie
błędów powstających przy późniejszych obliczeniach. Nie przekłada się to jednak
na przyspieszenie obliczeń.
Zgodnie z wzorami (2) i (3), niezaleŜnie od bazy systemu, liczby
zmiennoprzecinkowe są pamiętane w postaci 3 liczb całkowitych:
•
S
- znak liczby (ang.
sign bit);
•
M
- mantysa liczby (ang.
significand),
w zapisie dwójkowym
M
2
lub dziesiętnym
M
10
;
•
W
- wykładnik liczby (ang.
exponent)
określany przy uwzględnieniu dwójkowej
(W
2
) lub dziesiętnej (W
10
) bazy systemu.
wpisana liczba
X
10
IEEE
→
−
754
fl
(
X
B
)
=
(
−
1
)
⋅
M
B
⋅
B
W
B
,
S
(1)
gdzie
B
to baza systemu (ang.
radix),
zaś
fl(X
B
) oznacza wartość liczby w zapisie
zmiennoprzecinkowym, która wynika z ograniczeń zapisu komputerowego. W
ramach standardu podano specyfikacje dwóch form zapisu:
3
4
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
2.1. Dwójkowy zapis zmiennoprzecinkowy
Zasadnicza część standardu, określona w wersji z roku 1985, dotyczy
dwójkowej reprezentacji liczb zmiennoprzecinkowych (BFP). W tej formie
reprezentacji, zarówno mantysa jak teŜ wykładnik są najpierw przetwarzane na
liczby w zapisie binarnym (B=2) i następnie kodowane. WyróŜnia się przy tym:
•
postać znormalizowaną, stosowaną dla zdecydowanej większości liczb,
•
postać zdenormalizowaną, przewidzianą do zapisu bardzo małych liczb, dla
których wykładnik
W
2
osiągnął najmniejszą dopuszczalną wartość. W dalszym
opisie pominięto dyskusję tego przypadku.
Normalizacji podlega binarna postać liczby. Polega to na przesunięciu
przecinka tak, aby przed nim znalazła się jedna (wiodąca) jedynka. Efektem tej
operacji jest równieŜ obliczenie wykładnika, który wskazuje rzeczywiste połoŜenie
przecinka w dwójkowym zapisie liczby. Przykłady liczb przed i po normalizacji
przedstawiono w tabeli 1.
Tabela 1. Przykłady binarnego zapisu liczb zmiennoprzecinkowych.
ZałoŜono, Ŝe mantysa
M
2
składa się z co najwyŜej 7 bitów.
Zapis binarny
Wartości kolejnych pól
(1)
Wpisana liczba
przed normalizacją
po normalizacji
X
10
S
M
2
W
2
X
2
fl(X
2
)
9,0
25,125
-5,25
-103,5
0,625
-0,078125
-11,3
(1)
Po wykonaniu normalizacji, na bitach mantysy jest pamiętana jedynie część,
która znalazła się za przecinkiem (ułamek). Ewentualne wolne bity części
ułamkowej po prawej stronie są uzupełniane zerami. Wiodąca jedynka (przed
przecinkiem) i przecinek są pomijane (tzw. zapis z pominiętą / zapomnianą
jedynką). W tabeli 1 kolorem Ŝółtym zaznaczono „usuwane” elementy zapisu liczb.
Zapomniana jedynka i przecinek są oczywiście „odtwarzane” w rejestrach jednostki
zmiennoprzecinkowej, przed wykonaniem obliczeń.
2.2. Dziesiętny zapis zmiennoprzecinkowy
Przy stosowaniu DFP normalizacji podlega liczba w zapisie dziesiętnym. Jej
postać jest modyfikowana tak, aby znaczące cyfry zajęły wszystkie dostępne pola
mantysy
M
10
(bez wiodących zer z lewej strony). Rzeczywiste połoŜenie przecinka
jest odzwierciedlone w wartości wykładnika
W
10
. W tabeli 2 przedstawiono
przykłady zapisu liczb z bazą
B=10.
Tabela 2. Przykłady dziesiętnego zapisu liczb zmiennoprzecinkowych (B=10),
przy załoŜeniu Ŝe mantysa
M
10
składa się z siedmiu cyfr znaczących.
Wartości kolejnych pól
(1)
Wpisana liczba
Zapis DFP
X
10
fl(X
10
)
S
M
10
W
10
9,0
9,0
25,125
25,125
-5,123456
-100043,5
0,015625475
123456789,4
-59789904
(1)
+9000000·10
-6
+0000090·10
-1
+2512500·10
-5
+0025125·10
-3
-5123456·10
-6
-1000435·10
-1
+1562548·10
-8
+1234568·10
+2
-5978990·10
+1
0
0
0
0
1
1
0
0
1
9000000
0000090
2512500
0025125
5123456
1000435
1562548
1234568
5978990
-6
-1
-5
-3
-6
-1
-8
+2
+1
1001,0
11001,001
-101,01
-1100111,1
0,101
-0,000101
+1,0010000·2
3
+1,1001001·2
4
-1,0101000·2
2
-1,1001111·2
6
+1,0100000·2
-1
-1,0100000·2
-4
0
0
1
1
0
1
1
0010000
1001001
0101000
1001111
0100000
0100000
0110101
3
4
2
6
-1
-4
3
-1011,010011 -1,0110101·2
3
W celu uproszczenia zapisu wartości
W
2
podano w zapisie dziesiętnym. W rzeczywistości pola
wykładnika
W
2
podlegają kodowaniu binarnemu, z uŜyciem kodu Excess o dobranym
przesunięciu. Pola binarne mantysy ograniczono do 7 bitów. W dostępnych formatach zapis
mantysy składa się z większej liczby bitów (tabela 6).
W celu uproszczenia zapisu wartości
M
10
i
W
10
podano w zapisie dziesiętnym.
W rzeczywistości pola mantysy
M
10
i wykładnika
W
10
podlegają kodowaniu binarnemu,
z uŜyciem wybranych kodów.
5
6
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
W przypadku liczb ułamkowych i małych co do modułu, normalizacja wiąŜe się
z przesuwaniem przecinka w prawo, tak aby zapis liczby przyjął postać liczby
całkowitej. Oczywiście ulega przy tym zmianie wartość wykładnika.
Liczby, w których jest mało cyfr znaczących nie podlegają normalizacji.
Zgodnie ze standardem mogą one mieć róŜne formy zapisu (np. liczby 9 oraz
25,125 w tabeli 2).
Tabela 4. Dodatkowe, połówkowe formaty reprezentacji zmiennoprzecinkowej.
Nazwa
binary16
decimal32
Typowa nazwa
połówkowa precyzja
ang.
half precision
Baza zapisu
B
2
10
Wielkość zapisu liczby
N
L
2B
4B
3. Dostępne formaty reprezentacji liczb
W ramach standardu określono podstawowe, dostępne formaty zapisu BFP
(dwójkowego) i DFP (dziesiętnego) (tabela 3).
Tabela 3. Podstawowe formaty reprezentacji zmiennoprzecinkowej.
Nazwa
binary32
binary64
binary128
decimal64
decimal128
Typowa nazwa
pojedyncza precyzja
ang.
single precision
podwójna precyzja
ang.
double precision
poczwórna precyzja
ang.
quadruple precision
Baza zapisu
B
2
2
2
10
10
Wielkość zapisu liczby
N
L
4B
8B
16 B
8B
16 B
Ze względów historycznych występuje jeszcze tzw. precyzja rozszerzona
(tabela 5). W ramach standardu dopuszczono jej stosowanie. Rozszerzona
reprezentacja liczb zmiennoprzecinkowych jest dostępna jedynie na wybranych
platformach sprzętowych i przy stosowaniu wybranych kompilatorów.
Tabela 5. Inne dopuszczone formaty reprezentacji zmiennoprzecinkowej.
Nazwa
extended
Typowa nazwa
rozszerzona precyzja
ang.
extended precision
Baza zapisu
B
2
Wielkość zapisu liczby
N
L
10 B
4. Informacje o binarnym kodowaniu liczb
Specyfikacja standardu określa równieŜ techniczne szczegóły kodowania pól
mantysy i wykładnika w zapisie BFP (M
2
i
W
2
) oraz DFP (M
10
,
W
10
). Wskazany opis
jest istotny dla zrozumienia pojęcia
liczba maszynowa,
określenia precyzji i
zakresu reprezentowanych liczb. Szczegóły binarnego zapisu liczb nie mają
znaczenia przy programowaniu w językach wysokiego poziomu, czy teŜ
korzystaniu ze standardowych bibliotek zawierających procedury do obliczeń
zmiennoprzecinkowych (np. dla układów FPGA, procesorów sygnałowych).
W tabeli 6 zestawiono główne parametry charakteryzujące omawiane formaty
zapisu zmiennoprzecinkowego. Przyjęto następujące oznaczenia:
N
L
liczba bajtów, na których jest zapisywana liczba w danej
reprezentacji;
N
S
liczba bitów na zapis znaku liczby (S);
8
Dopuszczono równieŜ dwa formaty skrócone, połówkowe (tabela 4). Nie są to
formaty podstawowe, do powszechnego uŜycia. Mogą być stosowane do zapisu
(przechowania) wartości liczbowych. Ich przyjęcie pozwala wprowadzić skróconą
reprezentację w wybranych aplikacjach (np. ekonomicznych, bankowych), w
których wystarcza zapamiętanie 2-4 cyfr po przecinku. Dwójkowy format
połówkowy (tzw.
binary16)
jest stosowany przy przetwarzaniu w niektórych
procesorach graficznych.
7
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
Standard IEEE 754, przetwarzanie liczb zmiennoprzecinkowych
N
W
N
M
max
W
10
P
10
liczba bitów na zapis wykładnika (W);
liczba bitów na zapis mantysy (M);
maksymalny wykładnik w systemie dziesiętnym, który moŜna zapisać;
precyzja zapisu, wyraŜona jako liczba cyfr w dziesiętnym zapisie
liczby, które zostaną zachowane bez błędu. JeŜeli liczba dziesiętna
złoŜona z
P
10
znaczących cyfr zostanie zamieniona z zapisu
„rzeczywistego” na numeryczny zmiennoprzecinkowy i następnie z
powrotem na „rzeczywisty”, to co najmniej
P
10
cyfr pozostanie
niezmienionych.
Wewnętrzna reprezentacja liczby w formatach DFP nie ma wpływu na zakres i
precyzję zapisu.
Oczywiście, w końcowej formie, zarówno przy dwójkowym jak teŜ dziesiętnym
zapisie zmiennoprzecinkowym, wszystkie pola są kodowane binarnie. W ramach
zmiennoprzecinkowego zapisu liczb nie ma Ŝadnych metod kontroli i weryfikacji
poprawności zapisu / odczytu danych. Nie jest to powaŜny problem przy
przetwarzaniu w ramach danego urządzenia. Ze względu na moŜliwe zakłócenia
przy przesyłaniu tego typu danych na znaczne odległości, do kontroli poprawności
moŜliwe, a czasami niezbędne, jest stosowanie róŜnych zewnętrznych metod
kontroli, m.in. wprowadzenie słowa kontrolnego, sygnatury pakietu danych, itp.
Techniczne zasady kodowania liczb w formacie BFP oraz zapisach dostępnych
dla DFP przedstawiono na rys. 1.
(a)
Tabela 6. Wybrane parametry zmiennoprzecinkowych reprezentacji liczb.
Nazwa
binary16
binary32
binary64
binary128
extended
decimal32
(1)
decimal64
(1)
decimal128
(1)
(1)
N
L
2B
4B
8B
16 B
10 B
4B
8B
16 B
N
S
1b
1b
1b
1b
1b
1b
1b
1b
N
W
5b
8b
11 b
15 b
15 b
6b
8b
12 b
N
M
10 b
23 b
52 b
112 b
64 b
20 b
50 b
110 b
max
W
10
+5
+38
+308
+4932
+4932
+96
+384
+6144
P
10
3
7
15
34
18
7
16
34
S
N
S
=1
W
2
N
W
M
2
bez wiodącej jedynki i przecinka
N
M
M
10
w formacie
binary integer significand
lub formacie
densely packed decimal significand
N
M
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
(b)
S
N
S
=1
W
10
N
W
W zapisie wyróŜniono jeszcze 5 bitów kodujących róŜne formy reprezentacji
wykładnika i mantysy.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Ze względu na sposób kodowania liczb wyróŜnia się:
•
format dla reprezentacji BFP, uwzględniający zapis liczb znormalizowanych i
bez normalizacji (bardzo małych);
•
formaty dla reprezentacji DFP, w tym:
o
zapis binarny mantysy
M
10
jako liczby całkowitej (ang.
binary integer
significand field),
czyli zapis mantysy w typowym kodzie wagowym BCN;
o
zapis binarny, w którym poszczególne cyfry mantysy
M
10
są kodowane
osobno. W kodowaniu cyfr mantysy wykorzystuje się kod DPD (ang.
densely packed decimal significand field),
który jest skompresowaną formą
kodu BCD.
9
Dodatkowe bity kodujące
postać
W
10
i
M
10
Rys. 1. Ogólna idea reprezentacji liczb w zmiennoprzecinkowym zapisie:
(a) dwójkowym BFP (B=2), (b) dziesiętnym DFP (B=10).
Jedynie kodowanie bitu znaku
S
jest jednakowe w BFP i DFP. Bit znaku liczby
(S) znajduje się na początku i przyjmuje wartość 0 dla liczb dodatnich oraz wartość
1 dla liczb ujemnych (taką formę kodowania uwzględniono w tabelach 1 i 2).
10
Plik z chomika:
grzegorj
Inne pliki z tego folderu:
INF1_01.pdf
(457 KB)
INF1_01Z.pdf
(457 KB)
INF1_02.pdf
(250 KB)
INF1_02Z.pdf
(250 KB)
INF1_03.pdf
(124 KB)
Inne foldery tego chomika:
AdamByw
c++(PL book)
C++Builder 5
C++Builder 5 - Ćwiczenia praktyczne
CPP
Zgłoś jeśli
naruszono regulamin