Podstawy Informatyki

Transkrypt

Podstawy Informatyki
Podstawy Informatyki
Bożena Woźna-Szcześniak
[email protected]
Jan Długosz University, Poland
Wykład 5
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
1 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Pozwala zakodować dziesietn
˛ a˛ liczbe˛ rzeczywista˛ posiadajac
˛ a˛
zarówno cz˛eść całkowita,
˛ jak i ułamkowa,
˛ w innym wybranym
systemie pozycyjnym.
Ma tylko jedno ograniczenie - należy z góry określić ilość cyfr, na
której (co najwyżej) bedziemy
˛
kodowali cz˛eść ułamkowa˛ – czyli
ilość cyfr po przecinku.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
2 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna
˛
liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w
systemie o podstawie q:
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna
˛
liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w
systemie o podstawie q:
Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy
przedstawić liczbe˛ A.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna
˛
liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w
systemie o podstawie q:
Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy
przedstawić liczbe˛ A.
Mnożymy A przez podstawe˛ systemu podniesiona˛ do potegi
˛ n.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna
˛
liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w
systemie o podstawie q:
Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy
przedstawić liczbe˛ A.
Mnożymy A przez podstawe˛ systemu podniesiona˛ do potegi
˛ n.
Zaokraglamy
˛
wynik mnożenia do liczby całkowitej, a nastepnie
˛
kodujemy ja˛ w wybranym systemie tak, jak koduje sie˛ zwyczajne
liczby całkowite.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
3 / 23
LICZBY RZECZYWISTE - Algorytm Hornera
Dana jest dziesietna
˛
liczba rzeczywista A. Aby zakodować te˛ liczbe˛ w
systemie o podstawie q:
Przyjmujemy dokładność do n cyfr po przecinku z jaka˛ chcemy
przedstawić liczbe˛ A.
Mnożymy A przez podstawe˛ systemu podniesiona˛ do potegi
˛ n.
Zaokraglamy
˛
wynik mnożenia do liczby całkowitej, a nastepnie
˛
kodujemy ja˛ w wybranym systemie tak, jak koduje sie˛ zwyczajne
liczby całkowite.
Na koniec, zgodnie ze wstepnym
˛
założeniem, oddzielamy ostatnie
n cyfr przecinkiem.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
3 / 23
Algorytm Hornera - PRZYKŁAD
Zakodować liczbe˛ A = 2875, 1023 w systemie ósemkowym z
dokładnościa˛ do 5 miejsc po przecinku.
Mnożymy liczbe˛ A przez 85 :
2875, 1023 · 85 = 2875, 1023 ∗ 32768 = 94211352.1664
Kodujemy liczbe˛ 94211352 w systemie o podstawie 8. Wynosi
ona: 547306430(8)
Ustalamy miejsce przecinka zgodnie z założeniem, tj.
5473, 06430(8)
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
4 / 23
Reprezentacja liczb rzeczywistych
Liczby rzeczywiste można przedstawiać:
w postaci kodu stałoprzecinkowego (stałopozycyjnego)
w postaci kodu zmiennoprzecinkowego (zmiennopozycyjnego)
Nie jest możliwe przedstawienie nieskończonych zbiorów za
pomoca˛ skończonej liczby bitów. Do obliczeń w komputerach
stosuje sie˛ reprezentacje˛ skończonych podzbiorów liczb
rzeczywistych.
Zgodne jest to ze standardem IEEE 754, gdzie określony został
standard zapisu i działań arytmetycznych na liczbach
zmiennoprzecinkowych.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
5 / 23
REPREZENTACJA STAŁOPOZYCYJNA
W notacji stałopozycyjnej możliwe jest reprezentowanie zakresu
dodatnich i ujemnych liczb całkowitych ze środkiem w zerze.
Przy założeniu ustalonego przecinka pozycyjnego format ten
umożliwia również reprezentacje˛ liczb ze składnikiem ułamkowym.
W notacji stałopozycyjnej nie moga˛ być reprezentowane ani
bardzo duże liczby, ani bardzo małe ułamki.
Ułamkowe składniki ilorazu przy dzieleniu dwóch dużych liczb
moga˛ być utracone.
Przykład:
11111111
| {z }, 00001111
| {z } = 255, 06640625
255
Bożena Woźna-Szcześniak (AJD)
15
256
Podstawy Informatyki
Wykład 5
6 / 23
REPREZENTACJA ZMIENNOPOZYCYJNA
SYSTEM CECHA-MANTYSA
System jest oparty na podziale liczby na cz˛eść ułamkowa˛ zwana˛
mantysa˛ oraz na wykładnik potegi
˛ podstawy systemu zwany
cecha.
˛
Opracowany został na podstawie zapisu liczby w systemie
pozycyjnym wagowym.
Umożliwia zapis liczb rzeczywistych z ustalonym błedem
˛
wzglednym.
˛
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
7 / 23
REPREZENTACJA ZMIENNOPOZYCYJNA
Przykład liczby binarnej zapisanej w postaci cecha-mantysa na
dwóch bajtach
00000011
| {z }, 10100000
| {z }
cecha
mantysa
W praktyce zwykle na ceche˛ przeznaczamy jeden bajt, na
mantyse˛ minimum trzy bajty.
Ilość bajtów przeznaczonych na ceche˛ decyduje o zakresie.
Ilość bajtów przeznaczonych na mantyse˛ decyduje o błedzie.
˛
Liczby ujemne w mantysie sa˛ kodowane w systemie znak-moduł,
zaś dla cechy w systemie u2.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
8 / 23
Reprezentacja liczb w systemie cecha-mantysa
L = (−1)s · m · N c ,
gdzie:
N-podstawa systemu
s -to bit znaku:
0 oznacza 0 +0 , bo (−1)0 = 1
1 oznacza 0 −0 , bo (−1)1 = −1
c – cecha, całkowity wykładnik potegi,
˛ dzieki
˛ któremu przecinek w
liczbie zostaje przesuniety
˛ tak, aby utworzyć mantyse˛ w zgodzie z
powyższa˛ definicja.
˛
m – mantysa - liczba mniejsza od jedności.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
9 / 23
Kod FP2 (ang. floating point)
Dla kodowania FP2 liczb zmiennoprzecinkowych przyjmuje sie˛
mantyse˛ znormalizowana˛ do przedziału h1; 2), czyli h1(2) ; 10(2) ).
Mantyse˛ zapisuje sie˛ w postaci liczby całkowitej dodatniej oraz
bitu znaku, ceche˛ przy pomocy kodu U2.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
10 / 23
Kodowanie FP2 - przykład
Znak
mantysy
Cecha(c)−
w kodzie U2
Mantysa(m)−
w kodzie ZM
Bit
7
6
5
4
3
2
1
0
Waga
s
−8
4
2
1
2−1
2−2
2−3
L = (−1)s · 1.m · 2c
dla liczby:
00010110(FP2)
0, 875(10) = 0, 111(2)
s=0
L = (−1)0 · 1, 11(2) · 2(−1)
c = 0010(U2) = 2
c = −1 = 1111(U2)
m = 1, 110(2) = 1 34
m = 1, 110(2)
L = (−1)0 · 1 43 · 22 = 7(10)
0, 875(10) = 01111110(FP2)
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
11 / 23
Kodowanie FP2 - przykład
bit
waga
znak
15
s
14
-16
bit
waga
9
2−1
8
2−2
Cecha - kod U2
13
12
11
10
8
4
2
1
Mantysa - kod ZM
7
6
5
4
3
2−3
2−4
2−5
2−6
2−7
2
2−8
1
2−9
0
2−10
L = (−1)s · 1.m · 2c
Aby zapisać A = 1984, 0415(10) w kodzie FP2:
Ustalamy znak: s = 0.
Stosujac
˛ algorytm Hornera zapisujemy liczbe˛ A w systemie
binarnym (na takiej liczbie bitów, ile bitów ma mantysa + 1).
1984, 0415 · 211 = 4063316, 992 ≈ 4063317
1984, 0415 = 11111000000, 00001010101
Dokonujemy normalizacji – czyli przesuwamy przecinek tak, aby
przed przecinkiem znajdowała sie˛ tylko jedna niezerowa cyfra.
Otrzymujemy: 1, 111100000000001010101
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
12 / 23
Kodowanie FP2 - przykład
Skoro jedyna˛ możliwa˛ niezerowa˛ cyfra˛ w systemie dwójkowym
jest 1, to możemy zapamietać,
˛
że ona tam jest i oszcz˛edzić jeden
bit nie zapisujac
˛ jej.
Mantyse˛ tworza˛ kolejne cyfry spisane poczawszy
˛
od przecinka, aż
po cyfre,
˛ która zapisana zostanie na ostatnim bicie
zarezerwowanym dla mantysy (w tym przykładze 10 bitów). Jeśli
cyfr jest mniej niż bitów mantysy, to wolne bity uzupełniamy 0).
m = 1111000000
Ponieważ przecinek przesuneliśmy
˛
o 10 miejsc w lewo, jako ceche˛
trzeba zapisać liczbe˛ 10 w kodzie U2, tj.
c = 01010(U2)
Zatem
1984, 0415(10) = 0010101111000000(FP2)
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
13 / 23
Dekodowanie - przykład
0010101111000000(FP2)
Zatem:
s = 0, stad
˛ mamy (−1)0
m = 1111000000, stad
˛ 2−1 + 2−2 + 2−3 + 2−4
c = 01010(U2) = 10, a wiec
˛ mamy 210
Podstawiamy do wzoru na L i otrzymujemy:
L = (−1)0 · (20 + 2−1 + 2−2 + 2−3 + 2−4 ) · 210 =
1 1 1
1
+ + +
) · 1024 =
2 4 8 16
15
31
31744
=1
· 1024 =
∗ 1024 =
= 1984
16
16
16
= (1 +
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
14 / 23
UWAGA
Standard kodu FP2 przewiduje dodatkowo wartości specjalne:
Maksymalna wartość cechy przy zerowej wartości mantysy daje w
zależności od bitu znaku wartość zwana˛ −INF lub INF
oznaczajac
˛ a˛ odpowiednio −∞ i +∞.
Maksymalna wartość cechy przy jakiejkolwiek niezerowej wartości
mantysy, to tzw. NaN(ang. Not a Number), czyli wartość, która nie
jest poprawna˛ liczba.
˛
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
15 / 23
Standard IEEE 754
Pojedyncza precyzja = 32 (4 Bajty)
kolejne bity (od lewej) liczba bitów znaczenie
1
1
bitznaku
2−9
8
cecha(BIAS = 127)
10 − 33
23
mantysa
Podwójna precyzja = 64 (8 Bajtów)
kolejne bity (od lewej) liczba bitów znaczenie
1
1
bitznaku
2 − 12
11
cecha(BIAS = 1023)
13 − 64
52
mantysa
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
16 / 23
Standard IEEE 754
Bit znaku:
pierwszy bit w zapisie liczby zwany jest bitem znaku. Stan 0
oznacza liczbe˛ dodatnia,
˛ stan 1 liczbe˛ ujemna.
˛ Aby zatem zmienić
znak liczby zmiennoprzecinkowej na przeciwny, wystarczy dokonać
negacji tego bitu.
Bity kodu cechy:
Liczby zmiennoprzecinkowe IEEE 754 zapisuja˛ ceche˛ w kodzie z
nadmiarem.
W pojedynczej precyzji cecha posiada 8 bitów, a nadmiar wynosi
127. Zatem w polu cechy można zapisać wartości od −127
(wszystkie bity wyzerowane) do 128 (wszystkie bity ustawione na
1).
W podwójnej precyzji cecha posiada 11 bitów, a nadmiar wynosi
1023. Zatem w polu cechy można zapisać wartości od −1023 do
1024.
Wzrost ilości bitów cech liczb zmiennoprzecinkowych wpływa na ich
zakres.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
17 / 23
Standard IEEE 754
Bity mantysy:
W pojedynczej precyzji mantysa posiada 23 bity, a w podwójnej
precyzji 52 bity.
Wzrost liczby bitów mantysy liczb zmiennoprzecinkowych wpływa
na ich precyzje,
˛ czyli dokładność odwzorowywania liczb
rzeczywistych.
Mantysy sa˛ zapisywane w stałoprzecinkowym kodzie znak-moduł.
Ponieważ mantysa jest prawie zawsze znormalizowana, tj. zawiera
sie˛ w h1, 2). Wynika stad,
˛ iż pierwszy bit całkowity mantysy zawsze
wynosi 1. Skoro tak, to nie musi on być zapamietywany
˛
- bedzie
˛
automatycznie odtwarzany w czasie wykonywania obliczeń na
liczbie zmiennoprzecinkowej.
W polu mantysy zapamietujemy
˛
tylko bity ułamkowe. Dzieki
˛ tej
prostej sztuczce zyskujemy jeden dodatkowy bit mantysy zwiekszamy
˛
jej rozdzielczość do 24 bitów dla formatu pojedynczej
precyzji i do 53 bitów dla formatu podwójnej precyzji.
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
18 / 23
IEEE 754 -przykład
Obliczyć wartość dziesietn
˛ a˛ liczby zmiennoprzecinkowej:
01000010110010000000000000000000(IEEE754)
Kod binarny dzielimy na poszczególne pola zawierajace
˛ kolejno znak,
ceche˛ oraz bity ułamkowe mantysy:
01000010110010000000000000000000
s=0
c = 10000101(BIAS=127) = 133 − 127 = 6
m = 01, 10010000000000000000000(ZM) =
19
16
Wartość liczby L(IEEE754) :
19 6 25 6
·2 =
· 2 = 25 · 22 = 25 · 4 = 100(10)
16
16
01000010110010000000000000000000(IEEE754) = 100(10)
(−1)s · m · 2c = (−1)0 ·
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
19 / 23
IEEE 754 -przykład
Obliczyć wartość dziesietn
˛ a˛ liczby zmiennoprzecinkowej:
11000001110110000000000000000000(IEEE754)
Kod binarny dzielimy na poszczególne pola zawierajace
˛ kolejno znak,
ceche˛ oraz bity ułamkowe mantysy:
11000001110110000000000000000000
s=1
c = 1000011(BIAS=127) = 131 − 127 = 4
m = 01, 10110000000000000000000(ZM) = 1
11
16
Wartość liczby:
11 4
27 4
·2 =−
· 2 = −27(10)
16
16
11000001110110000000000000000000(IEEE754) = −27(10)
L(IEEE754) = (−1)s · m · 2c = (−1)1 · 1
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
20 / 23
Wartości specjalne w IEEE 745
Wartość zero
W formacie IEEE 754 nie można zapisać w normalny sposób
wartości 0, ponieważ mantysa ma domyślna˛ cz˛eść całkowita˛
równa˛ 1 - w polu mantysy zapamietywane
˛
sa˛ jedynie bity
ułamkowe.
Dlatego zero jest specjalnym przypadkiem liczby
zmiennoprzecinkowej, gdzie zarówno pole wykładnika jak i
mantysy zawiera same 0. Bit znaku może przyjmować dowolna˛
wartość (stad
˛ możemy dostać dodatnie lub ujemne 0, jednakże
przy porównaniu sa˛ one traktowane jak równe sobie).
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
21 / 23
Wartości specjalne w IEEE 745
Wartość zdenormalizowana
Jeśli wszystkie bity cechy maja˛ wartość 0, lecz mantysa zawiera
bity o wartościach 1 (w przeciwnym razie liczba zostanie
potraktowana jak opisane wcześniej zero), to jest to tzw.
zdenormalizowana liczba zmiennoprzecinkowa. W takim
przypadku mantysa nie posiada domyślnej cz˛eści całkowitej 1,
lecz jest liczba˛ ułamkowa,
˛ której bity zawarte sa˛ w polu formatu
IEEE 754.
Wartość zdenormalizowana˛ liczby zmiennoprzecinkowej liczymy
według wzoru:
Pojedyncza precyzja:
L = (−1)s · m · 2−126 ,
gdzie m = 00,(pole mantysy)(ZM)
Podwójna precyzja:
L = (−1)s · m · 2−1022 ,
gdzie m = 00,(pole mantysy)(ZM)
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
22 / 23
Wartości specjalne w IEEE 745
Pojedyncza precyzja – najmniejsza wartość:
00000000000000000000000000000001(IEEE754)
m = 00, 00000000000000000000001(U1) = 2−23
min(IEEE754) = 2−23 · 2−126 = 2−149
min(IEEE754) = 1, 4012984643248170709237295832899 · 10−45
min(IEEE754) = 1, 4 · 10−45
Bożena Woźna-Szcześniak (AJD)
Podstawy Informatyki
Wykład 5
23 / 23