Informatyka 1 - PB Wydział Elektryczny

advertisement
Informatyka 1
Politechnika Białostocka - Wydział Elektryczny
Elektrotechnika, semestr II, studia niestacjonarne I stopnia (zaoczne)
Rok akademicki 2007/2008
Wykład nr 5 (13.04.2008)
dr inŜ. Jarosław Forenc
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Plan wykładu nr 5
Arytmetyka liczb binarnych
Arytmetyka w kodzie U2
Zapis zmiennoprzecinkowy liczby rzeczywistej
Arytmetyka liczb zmiennoprzecinkowych
Zapis liczb zmiennoprzecinkowych w systemie binarnym
Standard IEEE 754
2/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
3/53
Arytmetyka liczb binarnych - dodawanie
Operacja dodawania jest wykonywana podobnie jak w systemie dziesiętnym
Podstawowe operacje przy dodawaniu mają postać przedstawioną w tabeli
Dodatkowo naleŜy pamiętać, Ŝe:
1( 2 ) + 1( 2) + 1( 2) = 11( 2)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
4/53
Arytmetyka liczb binarnych - dodawanie
Przykłady:
4 (10) + 7 (10) = 11(10)
przy dodawaniu 1 + 1 następuje
przeniesienie do następnej kolumny
w bieŜącej kolumnie zapisujemy 0,
a 1 dodajemy w następnej kolumnie
14(10) + 7 (10) = 21(10)
jeśli przy dodawaniu 1 + 1
występuje dodatkowo przeniesienie
z poprzedniej kolumny, to
w bieŜącej kolumnie zapisujemy 1
oraz dodajemy 1 w następnej
kolumnie
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
5/53
Arytmetyka liczb binarnych - dodawanie
W pamięci komputera liczby binarne mają ściśle określony rozmiar:
1, 2 lub 4 bajty
Jeśli wynik sumowania, np. dwóch liczb 8-bitowych jest większy od 8 bitów,
to najstarszy bit zostaje utracony i otrzymany wynik jest nieprawidłowy
Sytuacja taka nazywana jest nadmiarem (ang. overflow)
Przykład:
255(10) + 1(10) = 256(10)
+1 +1 +1 +1 +1 +1 +1 +1
+
1
1
1
1
1
1
1
1
1
255(10)
0
0
0
0
0
0
0
1
1(10)
0
0
0
0
0
0
0
0
0(10)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
6/53
Arytmetyka liczb binarnych - odejmowanie
Podstawowe operacje przy odejmowaniu mają postać przedstawioną w tabeli
a
b
a-b
0
0
0
0
1
1
1
0
1
1
1
0
+ poŜyczka do
następnej pozycji
Przy odejmowaniu 0 - 1 otrzymywany jest wynik 1 i poŜyczka do następnej
pozycji
PoŜyczka wymaga odjęcia wartości 1 od wyniku odejmowania cyfr
w następnej kolumnie
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
7/53
Arytmetyka liczb binarnych - odejmowanie
Przykłady:
15(10) − 5(10) = 10(10)
10(10) − 6(10) = 4(10)
Bardzo często odejmowanie jest realizowane przez dodanie ze znakiem
przeciwnym odjemnika do odjemnej
a − b = a + ( − b)
− a − b = ( −a ) + ( − b )
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Arytmetyka liczb binarnych - odejmowanie
Jeśli od liczby mniejszej odejmiemy większą to wynik będzie ujemny,
a w kodzie NKB nie moŜna zapisywać liczb ujemnych
Podczas operacji odejmowania moŜe wystąpić konieczność poŜyczki,
w sytuacji, gdy skończą się juŜ liczby
Problem ten nazywa się niedomiarem (ang. underflow)
Przykład:
0(10) − 1(10) = −1(10)
8/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
9/53
Arytmetyka liczb binarnych - mnoŜenie
Zasady mnoŜenia są identyczne jak w systemie dziesiętnym
Podstawowe operacje przy mnoŜeniu mają postać przedstawioną w tabeli
WymnaŜamy przez siebie kolejne cyfry mnoŜnej i mnoŜnika, a iloczyny
częściowe dodajemy
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
10/53
Arytmetyka liczb binarnych - mnoŜenie
Przykład:
7 (10) ⋅ 5(10) = 35(10)
w mnoŜeniu uczestniczy tylko
cyfra 1
dla cyfry 0 wynik jest zerowy
i moŜna go pominąć
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
11/53
Arytmetyka liczb binarnych - dzielenie
Algorytmy dzielenia są najbardziej skomplikowane - najprostszą postać
ma algorytm dzielenia taki sam jak w przypadku systemu dziesiętnego
Algorytm ten polega na polega
na cyklicznym odejmowaniu
odpowiednio przesuniętego
dzielnika od dzielnej
Przykład:
11(10) : 2(10) = 5(10) r. 1(10)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
12/53
Reprezentacja liczb ze znakiem - kod U2 - dodawanie
Dodawanie liczb w kodzie U2 odbywa się standardową metodą - traktujemy
liczby jako zwykłe liczby binarne (dodatnie), dodajemy je otrzymując wynik
w kodzie U2
W operacji dodawania bierze udział takŜe bit znaku, a przeniesienie poza
najstarszy bit znaku jest ignorowane
Przykłady:
3(10) + 5(10) = 8(10)
+1 +1
3(10) + (−5) (10) = −2(10)
+1
0 0 1 1( U 2 ) → 3(10)
0 0 1 1( U 2 ) → 3(10)
+ 0 1 0 1( U 2 ) → 5(10)
1 0 0 0 ( U 2 ) → 8(10)
+ 1 0 1 1( U 2 ) → − 5(10)
1 1 1 0( U 2 ) → − 2(10)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
13/53
Reprezentacja liczb ze znakiem - kod U2 - dodawanie
Przykłady:
− 5(10) + (−2) (10) = −7 (10)
+1 +1 +1
1 0 1 1( U 2 ) → − 5(10)
+ 1 1 1 0( U 2) → − 2(10)
1 1 0 0 1( U 2 ) → − 7 (10)
ignorujemy przeniesienie
dodawanie dowolnych liczb w kodzie
U2 daje poprawny wynik zawsze
wtedy, gdy mieści się on w zakresie
liczb dla danego formatu
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
14/53
Reprezentacja liczb ze znakiem - kod U2 - odejmowanie
Odejmowanie odbywa się według tych samych zasad jak w NKB
Przykłady:
5(10) − 3(10) = 2(10)
−1
0 1 0 1( U 2 ) → 5(10)
− 0 0 1 1( U 2 ) → 3(10)
0 0 1 0( U 2) → 2 (10)
− 3(10) − 5(10) = −8(10)
1 1 0 1( U 2 ) → − 3(10)
− 0 1 0 1( U 2 ) → 5(10)
1 0 0 0( U 2) → − 8(10)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
15/53
Reprezentacja liczb ze znakiem - kod U2 - mnoŜenie
MnoŜenie liczb w kodzie U2 wykonywane jest w inny sposób niŜ
standardowe mnoŜenie w kodzie NKB
Przed wykonaniem mnoŜenia naleŜy rozszerzyć znakowo obie mnoŜone
liczby tak, aby ich liczba bitów wzrosła dwukrotnie (bit znaku jest
powielany), np.
5(10) = 0.101( U 2)
5(10) = 0.000 0101( U 2)
− 5(10) = 1.011( U 2)
− 5(10) = 1.111 1011( U 2 )
Po wykonaniu rozszerzenia znakowego liczby są mnoŜone standardowo
Otrzymywany wynik powinien być liczbą o długości równej sumie długości
mnoŜonych liczb - z tego powodu bity wykraczające poza tę długość są
ignorowane
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
16/53
Reprezentacja liczb ze znakiem - kod U2 - mnoŜenie
Przykład:
− 2(10) ⋅ 3(10) = −6(10)
− 2 (10) → 1110( U 2 )
ie znakowe
rozszerzen

 → 1111 1110( U 2 )
3(10) → 0011( U 2 )
ie znakowe
rozszerzen

 → 0000 0011( U 2 )
1
1
1
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
0
0
1
1
1
1
1
0
1
.
(U2)
-2(10)
(U2)
3(10)
(U2)
-6(10)
+
1
ignorujemy
0
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
17/53
Reprezentacja liczb ze znakiem - kod U2 - dzielenie
Najprostsza metoda dzielenia w U2 składa się z następujących kroków:
zapamiętanie znaków dzielonych liczb
zamiana liczb ujemnych na dodatnie
wykonanie dzielenia dla liczb naturalnych
zmiana znaku wyniku, jeśli znak dzielnej i dzielnika róŜnią się
Podczas dzielenia znaki wyniku i reszty przyjmują wartości
przedstawione w tabeli
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Reprezentacja liczb ze znakiem - kod U2 - dzielenie
Przykład:
6(10) : (−3) (10) = −2 (10)
6(10) → 0110( U 2 )
− 3(10) → 1101( U 2 )
dodatnia
liczba

→ 3(10) → 0011( U 2 )
18/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Reprezentacja liczb ze znakiem - porównanie kodów
Porównanie interpretacji
wartości słów kodu
binarnego w róŜnych
systemach zapisu liczb
ze znakiem
- liczba dodatnia
- liczba ujemna
- zero
19/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Zapis zmiennoprzecinkowy liczby rzeczywistej
Zapis bardzo duŜych lub bardzo małych liczb w normalnej notacji
pozycyjnej jest niewygodny gdyŜ wymaga duŜej ilości cyfr, np.
dwanaście bilionów:
12 000 000 000 000
trzydzieści trylionów:
30 000 000 000 000 000 000
jedna bilionowa:
0,000 000 000 001
Znacznie prostsze jest przedstawienie powyŜszych liczb w postaci
zmiennoprzecinkowej (ang. floating point numbers)
12 000 000 000 000
= 1,2—1013
30 000 000 000 000 000 000
= 3,0—1019
0,000 000 000 001
= 1,0—10-12
PowyŜszy zapis nazywamy takŜe zapisem w postaci wykładniczej
lub teŜ notacją naukową
20/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Zapis zmiennoprzecinkowy liczby rzeczywistej
Zapis liczby zmiennoprzecinkowej ma postać:
L = M ⋅ BE
gdzie:
L
M
B
E
-
wartość liczby
mantysa
podstawa systemu
wykładnik, cecha
Przykład:
2,43 ⋅103(10) = 2,43 ⋅1000 = 2430(10)
21/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Zapis zmiennoprzecinkowy liczby rzeczywistej
Przykłady:
1,011⋅10101( 2) = ?(10)
M = 1,011( 2) = 1⋅ 2 0 + 0 ⋅ 2 −1 + 1 ⋅ 2 −2 + 1 ⋅ 2 −3 = 1 + 0,25 + 0,125 = 1,375(10)
B = 10( 2) = 0 ⋅ 20 + 1 ⋅ 21 = 2 (10)
E = 101( 2) = 1 ⋅ 2 0 + 0 ⋅ 21 + 1 ⋅ 2 2 = 1 + 4 = 5(10)
1,011⋅10101( 2) = 1,375 ⋅ 25 = 1,375 ⋅ 32 = 44(10)
3,121⋅1032 ( 4) = ?(10)
M = 3,121( 4) = 3 ⋅ 4 0 + 1⋅ 4 −1 + 2 ⋅ 4 − 2 + 1 ⋅ 4 −3 = 3,390625(10)
B = 10( 4) = 0 ⋅ 40 + 1 ⋅ 41 = 4 (10)
E = 32( 4) = 2 ⋅ 40 + 3 ⋅ 41 = 2 + 12 = 14(10)
3,121⋅1032 ( 4) = 3,390625 ⋅ 414 = 910 163 968(10)
22/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
23/53
Zapis zmiennoprzecinkowy liczby rzeczywistej
PołoŜenie przecinka w mantysie nie jest ustalone i moŜe się zmieniać
PoniŜsze zapisy oznaczają tę samą liczbę
243—101 = 24,3—102 = 2,43—103 = 0,243—104
Dla ujednolicenia zapisu przyjęto tzw. postać znormalizowaną zapisu
liczby, w której mantysa spełnia nierówność:
B > M ≥1
Przykład:
2,43—103
- postać znormalizowana, gdyŜ: 10 > | 2,43 | ≥ 1
0,243—104
- to nie jest postać znormalizowana
2,43—102
- to nie jest postać znormalizowana
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
24/53
Zapis zmiennoprzecinkowy liczby rzeczywistej
Jak zapisać liczbę w postaci zmiennoprzecinkowej?
Przykład:
1523,169(10)
zapisujemy mantysę przy wykładniku równym zero
1523,169 ⋅100 (10)
normalizujemy mantysę modyfikując wykładnik liczby
1,523169 ⋅103(10)
dodatkowo moŜe nastąpić obcięcie (ang. truncate) albo zaokrąglenie
(ang. round) mantysy do zadanej ilości cyfr, np.
- obcięcie: 1,5231⋅10
3
(10 )
- zaokrąglenie: 1,5232 ⋅103(10)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
25/53
Arytmetyka zmiennoprzecinkowa
W arytmetyce zmiennoprzecinkowej kolejność wykonywania operacji
ma wpływ na końcowy wynik
arytmetyka zmiennoprzecinkowa nie jest łączna
( x + y) + z ≠ x + ( y + z )
( x ⋅ y) ⋅ z ≠ x ⋅ ( y ⋅ z )
arytmetyka zmiennoprzecinkowa nie jest rozdzielna
x ⋅ ( y + z) ≠ ( x ⋅ y ) + ( x ⋅ z )
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
26/53
Arytmetyka liczb zmiennoprzecinkowych
Dodawanie i odejmowanie:
załóŜmy, Ŝe mamy dwie liczby zmiennoprzecinkowe:
L1 = M1 ⋅ B E1
L 2 = M 2 ⋅ BE 2
zakładając, Ŝe E1 < E2, suma (róŜnica) liczb ma postać:
L1 ± L 2 = (M1 ± M 2 ⋅ BE 2 −E1 ) ⋅ BE1
14243
wyrównanie
wykladników
mantysa sumy (róŜnicy) liczb jest sumą (róŜnicą) mantys liczb wyjściowych
sprowadzeniu ich do wspólnego wykładnika (jest to tzw. wyrównanie
wykładników liczb zmiennoprzecinkowych lub denormalizacja)
wykładnik sumy (róŜnicy) jest równy wykładnikowi dodawanych
(odejmowanych) liczb po wyrównaniu
po wykonaniu operacji arytmetycznej mantysa wyniku jest normalizowana
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
Arytmetyka liczb zmiennoprzecinkowych
Przykład - dodawanie:
obliczamy sumę dwóch liczb zmiennoprzecinkowych:
L1 = M1 ⋅ BE1 = 1,5 ⋅101
L 2 = M 2 ⋅ B E 2 = 2,5 ⋅10 2
wzór ogólny:
L1 + L 2 = (M1 + M 2 ⋅ BE 2 −E1 ) ⋅ BE1
obliczenia:
L1 + L 2 = (1,5 + 2,5 ⋅10 2 −1 ) ⋅101
L1 + L 2 = (1,5 + 2,5 ⋅101 ) ⋅101
L1 + L 2 = (1,5 + 25) ⋅101
L1 + L 2 = 26,5 ⋅101
normalizacja:
L1 + L 2 = 26,5 ⋅101 = 2,65 ⋅10 2
dr inŜ. Jarosław Forenc
27/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
28/53
Arytmetyka liczb zmiennoprzecinkowych
MnoŜenie:
iloczyn liczb L1 i L2 ma postać:
L1 ⋅ L 2 = (M1 ⋅ M 2 ) ⋅ B E1 + E 2
mantysa iloczynu jest iloczynem mantys, zaś wykładnik iloczynu jest sumą
wykładników
po wykonaniu operacji arytmetycznej mantysa wyniku jest normalizowana
Dzielenie:
iloraz liczb L1 i L2 ma postać:
L1 / L 2 = (M1 / M 2 ) ⋅ BE1 − E 2
mantysa ilorazu jest ilorazem mantys, zaś wykładnik ilorazu jest róŜnicą
wykładników
po wykonaniu operacji arytmetycznej mantysa wyniku jest normalizowana
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
29/53
Zapis liczb zmiennoprzecinkowych w systemie binarnym
W praktycznych realizacjach zapisu liczb zmiennoprzecinkowych
przyjmuje się ograniczony zakres na mantysę i cechę
Z powyŜszego powodu liczba w zapisie zmiennoprzecinkowym jest
określona z pewną dokładnością i moŜe występować tylko
w określonym zakresie
Zakodowana liczba zmiennoprzecinkowa ma postać:
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
30/53
Zapis liczb zmiennoprzecinkowych w systemie binarnym
Wartość liczby obliczana jest ze wzoru:
L = S ⋅ M ⋅ BE
gdzie:
L
S
M
B
E
-
wartość liczby
znak liczby (ang. sign), przyjmuje wartość 1 lub -1
znormalizowana mantysa (ang. mantissa), liczba ułamkowa
podstawa systemu liczbowego (ang. base)
wykładnik (ang. exponent), cecha, liczba całkowita
W systemie binarnym podstawa systemu jest stała: B = 2
L = S ⋅ M ⋅ 2E
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
31/53
Zakres liczb zmiennoprzecinkowych
ZałóŜmy, Ŝe liczba składa się z:
m - cyfr przeznaczonych na mantysę
n+1 - cyfr przeznaczonych na wykładnik (n - cyfr wartości i 1 cyfry znaku)
1 - cyfry znaku całej liczby
Wartości minimalne i maksymalne:
wykładnik:
E min = −B n + 1
E max = B n − 1
mantysa:
M min = 1
M max = B − B −( m −1)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
32/53
Zakres liczb zmiennoprzecinkowych
Wartości minimalne i maksymalne:
wykładnik:
E min = −B n + 1
E max = B n − 1
mantysa:
M min = 1
M max = B − B −( m −1)
W takim przypadku najmniejsza i największa wartość moŜliwa do zapisania
w tej reprezentacji wynoszą:
x min = M min ⋅ BE min = 1⋅ B E min
x max = M max ⋅ B E max = (B − B −( m −1) ) ⋅ BE max
Natomiast zakres liczb, które mogą być reprezentowane w danym zapisie:
− x max ,− x min ∪ { 0 } ∪ x min , x max
Zero jest wartością specjalną, która nie jest bezpośrednio reprezentowana
w tym zapisie
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
33/53
Zakres liczb zmiennoprzecinkowych
Przykład - liczba 32-bitowa:
E min = −B n + 1 = −2 7 + 1 = −127
E max = B n − 1 = 27 − 1 = 127
x min = 1 ⋅ BE min = 2 −127 = 5,88 ⋅10 −39
x max = (B − B− ( m −1) ) ⋅ BE max = (2 − 2 −( 23−1) ) ⋅ 2127 = 2128 − 2105 = 3,4 ⋅1038
− 3,4 ⋅1038 , − 5,88 ⋅10 −39 ∪ { 0 } ∪ 5,88 ⋅10 −39 , 3,4 ⋅1038
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
34/53
Liczby zmiennoprzecinkowe - przesunięcie wykładnika
W celu uniknięcia konieczności kodowania znaku wykładnika jest on
zapisywany jako wartość przesunięta o pewną stałą (ang. biased
exponent) - zapis wykładnika z nadmiarem, z przesuniętym wykładnikiem
Właściwą wartość wykładnika otrzymuje się poprzez odjęcie od
zakodowanego wykładnika wartości przesunięcia (ang. bias)
Wartość liczby zmiennoprzecinkowej oblicza się zatem ze wzoru:
L = (−1)S ⋅ M ⋅ 2 E −BIAS
gdzie:
L - wartość liczby
E - wykładnik
S - znak liczby
M - mantysa
BIAS - przesunięcie (nadmiar)
Typowe wartości przesunięcia wynoszą:
dla formatu 32-bitowego: 127(10) = 7F(16)
dla formatu 64-bitowego: 1023(10) = 3FF(16)
dla formatu 80-bitowego: 16383(10) = 3FFF(16)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Standard IEEE 754
W celu ujednolicenia operacji na liczbach zmiennoprzecinkowych na
róŜnych platformach sprzętowych opracowano odpowiedni standard
IEEE 754
Pełna nazwa standardu to: IEEE Standard for Binary Floating-Point
Arithmetic (ANSI/IEE Std 754-1985)
Obecnie praktycznie wszystkie implementacje sprzętowe liczb
zmiennoprzecinkowych oparte są o ten standard
Standard IEEE 754 definiuje dwie podstawowe klasy liczb
zmiennoprzecinkowych:
pojedynczej precyzji (ang. single-precision) - liczby 32-bitowe
podwójnej precyzji (ang. double-precision) - liczby 64-bitowe
35/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Standard IEEE 754
W standardzie IEEE 754 zdefiniowane zostały takŜe inne klasy liczb
zmiennoprzecinkowych:
pojedynczej rozszerzonej precyzji (ang. single-extended precision)
- liczby ≥ 43-bitowe, nie są powszechnie stosowane
podwójnej rozszerzonej precyzji (ang. double-extended precision)
- liczby ≥ 79-bitowe, zazwyczaj implementowane jako 80-bitowe
Standard IEEE 754 definiuje nie tylko sposób reprezentacji liczb,
ale takŜe:
sposób reprezentacji specjalnych wartości, np. nieskończoności, zera
sposób wykonywania działań na liczbach zmiennoprzecinkowych
sposób zaokrąglania liczb
36/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
37/53
Standard IEEE 754 - liczby 32-bitowe
Liczba pojedynczej precyzji przechowywana jest na 32 bitach:
Pierwszy bit w zapisie (bit nr 31) jest bitem znaku (0 - liczba dodatnia,
1 - liczba ujemna)
Wykładnik zapisywany jest na 8 bitach (bity nr 30-23) z nadmiarem
(przesunięciem wykładnika) o wartości 127
Wykładnik moŜe przyjmować wartości od -127 (wszystkie bity
wyzerowane) do 128 (wszystkie bity ustawione na 1)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
38/53
Standard IEEE 754 - liczby 32-bitowe
Liczba pojedynczej precyzji przechowywana jest na 32 bitach:
Mantysa zapisywana jest na 23 bitach w stałoprzecinkowym kodzie U1
W większości przypadków mantysa jest znormalizowana
Wartość mantysy zawiera się pomiędzy 1 a 2, a zatem w zapisie liczby
pierwszy bit jest zawsze równy 1
PowyŜszy bit nie jest zapamiętywany, natomiast jest automatycznie
uwzględniany podczas wykonywania obliczeń
Dzięki pominięciu tego bitu zyskujemy dodatkowy bit mantysy (zamiast
23 bitów mamy 24 bity)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
39/53
Standard IEEE 754 - liczby 32-bitowe
Przykład:
obliczmy wartość dziesiętną liczby zmiennoprzecinkowej
01000010110010000000000000000000( IEEE 754) = ?(10 )
dzielimy liczbę na części
0{
S − bit znaku
10000101
0000000000
1424
3 1001000000
144444
24444000
4
3
E − wykladnik
M − mantysa ( tylko czesc ulamkowa )
określamy znak liczby
S = 0 − liczba dodatnia
obliczamy wykładnik pamiętając, Ŝe w reprezentacji 32-bitowej nadmiar
wynosi 127
E = 10000101( 2 ) = 128 + 4 + 1 = 133 − 127
{ = 6(10)
nadmiar
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
40/53
Standard IEEE 754 - liczby 32-bitowe
Przykład (cd.):
wyznaczamy mantysę dopisując na początku 01 (0 - znak liczby w kodzie U1,
1 - część całkowita) i stawiając przecinek
M = 01,10010000000000000000000( U1) =
= 1⋅ 20 + 1⋅ 2 −1 + 1⋅ 2 −4 = 1 + 0,5 + 0,0625 = 1,5625(10)
wartość dziesiętną liczby zmiennoprzecinkowej obliczamy według wzoru:
L = (−1)S ⋅ M ⋅ 2 E
podstawiając otrzymujemy:
S = 0,
E = 6(10) ,
M = 1,5625(10)
L = (−1)0 ⋅1,5625 ⋅ 26 = 100 (10)
01000010110010000000000000000000( IEEE 754) = 100(10)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
41/53
Standard IEEE 754 - liczby 32-bitowe
Przykład:
obliczmy wartość dziesiętną liczby zmiennoprzecinkowej
11000011111010000000000000000000( IEEE 754) = ?(10)
dzielimy liczbę na części
1{
S − bit znaku
10000111
0000000000
1424
3 1101000000
144444
24444000
4
3
E − wykladnik
M − mantysa ( tylko czesc ulamkowa )
określamy znak liczby
S = 1 − liczba ujemna
obliczamy wykładnik pamiętając, Ŝe w reprezentacji 32-bitowej nadmiar
wynosi 127
E = 10000111( 2 ) = 128 + 4 + 2 + 1 = 135 − 127
{ = 8(10)
nadmiar
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
42/53
Standard IEEE 754 - liczby 32-bitowe
Przykład (cd.):
wyznaczamy mantysę dopisując na początku 01 (0 - znak liczby w kodzie U1,
1 - część całkowita) i stawiając przecinek
M = 01,11010000000000000000000( U1) =
= 1⋅ 20 + 1⋅ 2 −1 + 1 ⋅ 2 −2 + 1⋅ 2 −4 = 1 + 0,5 + 0,25 + 0,0625 = 1,8125(10)
wartość dziesiętną liczby zmiennoprzecinkowej obliczamy według wzoru:
L = (−1)S ⋅ M ⋅ 2 E
podstawiając otrzymujemy:
S = 0,
E = 8(10) ,
M = 1,8125(10)
L = (−1)1 ⋅1,8125 ⋅ 28 = −464(10)
11000011111010000000000000000000( IEEE 754) = −464(10)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
43/53
Standard IEEE 754 - liczby 64-bitowe
Liczba podwójnej precyzji przechowywana jest na 64 bitach:
Pierwszy bit w zapisie (bit nr 63) jest bitem znaku (0 - liczba dodatnia,
1 - liczba ujemna)
Wykładnik zapisywany jest na 11 bitach (bity nr 62-52) z nadmiarem
(przesunięciem wykładnika) o wartości 1024
Wykładnik moŜe przyjmować wartości od -1023 (wszystkie bity
wyzerowane) do 1024 (wszystkie bity ustawione na 1)
Mantysa zapisywana jest na 52 bitach w stałoprzecinkowym kodzie U1
Podobnie jak w liczbie pojedynczej precyzji, pierwszy bit mantysy,
zawsze równy 1, nie jest zapamiętywany
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
44/53
Standard IEEE 754 - zakres i precyzja liczb
Zakres liczb zmiennoprzecinkowych pojedynczej precyzji:
− 3,4 ⋅1038 ... 3,4 ⋅1038
Zakres liczb zmiennoprzecinkowych podwójnej precyzji:
− 1,8 ⋅10308 ... 1,8 ⋅10308
Precyzję podaje się najczęściej jako przybliŜoną ilość dziesiętnych cyfr
znaczących, precyzja zaleŜna jest od liczby bitów mantysy
Liczba zmiennoprzecinkowa pojedynczej precyzji ma 7 cyfr dziesiętnych
Liczba zmiennoprzecinkowa podwójnej precyzji ma 15-16 cyfr
dziesiętnych
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
45/53
Standard IEEE 754 - wartości specjalne
Oprócz zwykłych liczb w standardzie IEEE 754 zdefiniowano kilka
wartości specjalnych
Zero
bit znaku moŜe przyjmować dowolną wartość, a zatem moŜna otrzymać zero
dodatnie lub zero ujemne
- zero dodatnie
- zero ujemne
wszystkie bity wykładnika i mantysy są równe zeru
przy porównaniach zero dodatnie i ujemne są traktowane jako równe sobie
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
46/53
Standard IEEE 754 - wartości specjalne
Nieskończoność
bit znaku określa czy mamy nieskończoność dodatnią czy ujemną
- nieskończoność dodatnia
- nieskończoność ujemna
wszystkie bity wykładnika są równe jeden, zaś wszystkie bity mantysy - zero
nieskończoność występuje w przypadku wystąpienia nadmiaru (przepełnienia)
oraz przy dzieleniu przez zero
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
47/53
Standard IEEE 754 - wartości specjalne
Liczba zdenormalizowana
bit znaku moŜe być równy zero lub jeden, wszystkie bity wykładnika są
równe zeru, zaś bity mantysy przyjmują dowolne wartości
pojawia się, gdy występuje niedomiar (ang. underflow), ale wynik operacji
moŜna jeszcze zapisać denormalizując mantysę
w takim przypadku mantysa nie posiada domyślnej części całkowitej równej
1, tzn. reprezentuje liczbę o postaci 0,xxx…xxx, a nie 1,xxx…xxx
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Standard IEEE 754 - wartości specjalne
Nieliczby
w standardzie IEEE 754 zdefiniowane są dwie specjalne wartości,
które nie reprezentują wartości liczbowej
wartości te nazywane są NaN (ang. Not A Number - nie liczba)
powstają zazwyczaj w wyniku niedozwolonej operacji,
np. (obliczanie pierwiastka z liczby ujemnej)
wyróŜnia się dwa rodzaje nieliczb: QNaN i SNaN
QNaN (ang. Quiet NaN) - ciche nieliczby
ciche nieliczby „przechodzą” przez działania arytmetyczne
najczęściej oznaczają wartość niezdefiniowaną
ich wystąpienie nie powoduje wyjątku
48/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
49/53
Standard IEEE 754 - wartości specjalne
Nieliczby (cd.)
SNaN (ang. Significant NaN) - istotne, głośne nieliczby
powodują powstanie wyjątków w operacjach arytmetycznych i przerwanie
obliczeń
najczęściej oznaczają wartość niedozwoloną
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
50/53
Standard IEEE 754 - operacje z wartościami specjalnymi
Standard IEEE 754 definiuje dokładnie wyniki operacji, w których
występują specjalne argumenty
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
51/53
Język C - operacje z wartościami specjalnymi
1.0/0.0
-1.0/0.0
0.0/0.0
sqrt(-1.0)
1.0/INF
0*INF
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
printf("1.0/0.0
printf("-1.0/0.0
printf("0.0/0.0
printf("sqrt(-1.0)
printf("1.0/INF
printf("0*INF
system("pause");
return 0;
}
=
=
=
=
=
=
%f\n",1.0/0.0);
%f\n",-1.0/0.0);
%f\n",0.0/0.0);
%f\n",sqrt(-1.0));
%f\n",1.0/(1.0/0.0));
%f\n",0.0*(1.0/0.0));
=
=
=
=
=
=
1.#INF00
-1.#INF00
-1.#IND00
-1.#IND00
0.000000
-1.#IND00
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
52/53
Język C - reprezentacja liczb zmiennoprzecinkowych
Typy zmiennoprzecinkowe w języku C:
Nazwa typu
Rozmiar (bajty)
Zakres wartości
Cyfry znaczące
float
4 bajty
-3,4⋅10-38 … 3,4⋅1038
7-8
double
8 bajtów
-1,7⋅10-308 … 1,7⋅10308
15-16
long double
12 bajtów
PowyŜsze rozmiary podane zostały dla kompilatora Dev-C++
Typ long double moŜe mieć takŜe inny rozmiar:
Kompilator
Rozmiar (bajty)
MS Visual C++6.0
Borland C++ 3.1
8 bajtów
10 bajtów
Borland C++ Builder 6
Dev-C++
10 bajtów
12 bajtów
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
Koniec wykładu nr 5
Dziękuję za uwagę!
53/53
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
54/53
Źródła (KsiąŜki):
Biernat J.: „Architektura komputerów”. Oficyna Wydawnicza Politechniki
Wrocławskiej, Wrocław, 2005 - Rozdz. 4.2. Kodowanie i formaty danych
uŜytkowych (str. 68-78)
Kincaid D., Cheney W.: „Analiza numeryczna”. WNT, Warszawa, 2006 - Rozdz. 2.
Arytmetyka komputerowa (str. 33-51)
Ogrodzki J.: „Wstęp do systemów komputerowych”. Oficyna Wydawnicza
Politechniki Warszawskiej, Warszawa, 2002 - Rozdz. 3.2. Arytmetyka
stałoprzecinkowa (str. 49-60)
Stallings W.: „Organizacja i architektura systemu komputerowego. Projektowanie
systemu a jego wydajność”. WNT, Warszawa, 2004 - Rozdz. 8.3. Arytmetyka liczb
całkowitych (str. 327-342)
Wojtuszkiewicz K.: „Urządzenia techniki komputerowej. Część 1. Jak działa
komputer?”. PWN, Warszawa, 2007 - Rozdz. 2.2.1. Arytmetyka dwójkowa
(str. 45-56)
Biernat J.: „Metody i układy arytmetyki komputerowej”. Oficyna Wydawnicza
Politechniki Wrocławskiej, Wrocław, 2001 - Rozdz. 2.6. Reprezentacje
zmiennoprzecinkowe (str. 33-38)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
55/53
Źródła (KsiąŜki):
Ogrodzki J.: „Wstęp do systemów komputerowych”. Oficyna Wydawnicza
Politechniki Warszawskiej, Warszawa, 2002 - Rozdz. 4.1. Liczby
zmiennoprzecinkowe i operacje na nich (str. 61-64)
Pochopień B.: „Arytmetyka systemów cyfrowych”. Wydawnictwo Politechniki
Śląskiej, Gliwice, 2000 - Rozdz. 2.3. Format zmiennoprzecinkowy (str. 63-67)
Stallings W.: „Organizacja i architektura systemu komputerowego. Projektowanie
systemu a jego wydajność”. WNT, Warszawa, 2004 - Rozdz. 8.4. Reprezentacja
zmiennopozycyjna (str. 342-349)
Biernat J.: „Architektura komputerów”. Oficyna Wydawnicza Politechniki
Wrocławskiej, Wrocław, 2005 - Rozdz. 5.3. Arytmetyka zmiennoprzecinkowa
(str. 95-100)
Biernat J.: „Metody i układy arytmetyki komputerowej”. Oficyna Wydawnicza
Politechniki Wrocławskiej, Wrocław, 2001 - Rozdz. 3.6. Działania
zmiennoprzecinkowe (str. 57-62)
Pochopień B.: „Arytmetyka systemów cyfrowych”. Wydawnictwo Politechniki
Śląskiej, Gliwice, 2000 - Rozdz. 5. Arytmetyka liczb zmiennoprzecinkowych
(str. 117-125)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
56/53
Źródła (KsiąŜki):
Stallings W.: „Organizacja i architektura systemu komputerowego. Projektowanie
systemu a jego wydajność”. WNT, Warszawa, 2004 - Rozdz. 8.3. Arytmetyka
zmiennopozycyjna (str. 349-359)
Tanenbaum A.S.: „Strukturalna organizacja systemów komputerowych”. Helion,
Gliwice, 2006 - Rozdz. B1. Zasady arytmetyki zmiennoprzecinkowej (str. 741-745)
Biernat J.: „Metody i układy arytmetyki komputerowej”. Oficyna Wydawnicza
Politechniki Wrocławskiej, Wrocław, 2001 - Rozdz. D1. Standardy
zmiennoprzecinkowe IEEE 754/854 (str. 57-62)
Tanenbaum A.S.: „Strukturalna organizacja systemów komputerowych”. Helion,
Gliwice, 2006 - Rozdz. B2. Standard arytmetyki zmiennoprzecinkowej IEEE-754
(str. 745-748)
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
57/53
Źródła (Internet):
http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/012.php - Naturalny kod
binarny: operacje arytmetyczne w systemie dwójkowym
http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/018.php - Kodowanie liczb
ze znakiem: zapis uzupełnień do 2 - U2
http://pl.wikipedia.org/wiki/Kod_uzupe%C5%82nie%C5%84_do_dw%C3%B3ch Kod uzupełnień do dwóch
http://en.wikipedia.org/wiki/Two%27s_complement - Two’s complement
http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/020.php - Kodowanie liczb
ze znakiem: podsumowanie systemów dwójkowych
http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa - Liczba
zmiennoprzecinkowa
http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/008.php - Liczbowe systemy
pozycyjne: zapis zmiennoprzecinkowy
http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/021.php - Dwójkowe liczby
zmiennoprzecinkowe: przykładowy system zmiennoprzecinkowy
Informatyka 1, studia niestacjonarne I stopnia
Rok akademicki 2007/2008, Wykład nr 5
dr inŜ. Jarosław Forenc
58/53
Źródła (Internet):
http://en.wikipedia.org/wiki/IEEE_754 - IEEE 754-1985
http://pl.wikipedia.org/wiki/IEEE_754 - IEEE 754
http://www.i-lo.tarnow.pl/edu/inf/alg/num/pages/022.php - Dwójkowe liczby
zmiennoprzecinkowe: standard IEEE 754
Download