Arytmetyka komputerowa — istnieje 2n różnych liczb n

Transkrypt

Arytmetyka komputerowa — istnieje 2n różnych liczb n
Arytmetyka komputerowa
Wszelkie liczby zapisuje się przy użyciu bitów czyli cyfr binarnych: 0 i 1.
Ile różnych liczb można zapisać używajac n bitów?
n
1
2
3
4
···
n
···
liczby n-bitowe
0 1
00 01 10 11
000 001 010 011 100 101 110 111
0000 0001 0010 0011 0100 0101 0110 0111
1000 1001 1010 1011 1100 1101 1110 1111
···
ile ich jest?
2
4
8
···
16
···
2n
···
— istnieje 2n różnych liczb n-bitowych.
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 2
Arytmetyka komputerowa
W jaki sposób użyć tych n bitów do reprezentacji liczb całkowitych —
• żeby zapisać zarówno liczby dodatnie jak ujemne,
• żeby każdy układ bitów odpowiadał dokładnie jednej liczbie,
• żeby łatwo wykonywało się podstawowe operacje arytmetyczne.
Zapis stałopozycyjny liczb:
ciąg bitów bn−1 . . . b1 b0 reprezentuje liczbę
n−2
X
i=0
!
bi · 2i − bn−1 · 2n−1
= b0 · 20 + b1 · 21 + . . . + bn−2 · 2n−2 − bn−1 · 2n−1
Arytmetyka komputerowa — zapis stałopozycyjny
Załóżmy, że liczby są 3-bitowe. Wtedy:
000
001
010
011
100
101
110
111
=
=
=
=
=
=
=
=
0+0·2−0·4
1+0·2−0·4
0+1·2−0·4
1+1·2−0·4
0+0·2−1·4
1+0·2−1·4
0+1·2−1·4
1+1·2−1·4
=
=
=
=
=
=
=
=
0
1
2
3
−4
−3
−2
−1
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 4
Arytmetyka reszt (arytmetyka modulo n)
.........................
............. 3 ......................
........
......
.
.
.
.
.
.....
..
....
2......
.4
.
.
.
.
...
.
...
...
...
..
...
...
...
...
....
..
.5.
1
..
..
...
...
...
.
...
..
...
.
...
...
....
...
.
.....
.
.
6........
....0
.........
.......
.
.
.
.
.
.
.
.................
.
......7
.......................
8
Sklejamy liczby całkowite:
n − 1 = −1
n=0
n+1=1
···
9
Inaczej: każdą liczbę m zastępujemy
przez m % n —
resztę z dzielenia m przez n
Arytmetyka liczb całkowitych na komputerze jest arytmetyką reszt
(patrz niżej).
Arytmetyka reszt (arytmetyka modulo n)
Niech n ­ 2.
DEFINICJA: (relacja modulo n)
M
Dwie liczby całkowite p i q są równe modulo n, jeśli równe są reszty z ich
dzielenia przez n:
def
p ≡n q ⇐⇒
p%n = q%n
Fakt:
M
p ≡n q ⇐⇒ p − q jest podzielne przez n.
Fakt:
M
Relacja ≡n jest relacją równoważności na Z; t.zn. jest
• zwrotna:
p ≡n p
• symetryczna: jeśli p ≡n q to q ≡n p
• przechodnia: jeśli p ≡n q i q ≡n r to p ≡n r
Relacja równoważności pozwala podzielić zbiór Z na klasy abstrakcji: do
każdej klasy wchodzą liczby o tej samej reszcie z dzielenia przez n.
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 6
Arytmetyka reszt (arytmetyka modulo n)
Sklejenie „modulo” jest rozdzielne względem dodawania, odejmowania i
mnożenia liczb całkowitych:
• (m + k) % n = (m % n + k % n) % n
(13 + 4) % 8 = (13 % 8 + 4 % 8) % 8
= (5 + 4) % 8 = 9 % 8 = 1
• (m − k) % n = (m % n − k % n) % n
(13 − 26) % 8 = (13 % 8 − 26 % 8) % 8
= (5 − 2) % 8 = 3 % 8 = 3
• (m · k) % n = (m % n · k % n) % n
(13 · 26) % 8 = (13 % 8 · 26 % 8) % 8
= (5 · 2) % 8 = 10 % 8 = 2
Sklejenie „modulo” jest kongruencją względem tych działań.
.......................
................3
..........
...........
.
.
.
.......
.
.
.
.....
....
.
.
.
.
.
−4
2.......
.
.
.
.
.
...
...
....
...
..
...
...
...
...
...
..
...
−3
1
...
...
.
.
...
...
..
.
...
.
...
...
....
.
.
....
....
.....
−2
...0.
.
.......
.
.
.
.....
..........
....................................................
−1
dodatnie
ujemne
Arytmetyka komputerowa
arytmetyka
3-bitowa,
czyli
modulo 23 = 8
Arytmetyka liczb całkowitych w języku C w moim komputerze jest czterobajtowa; to znaczy modulo (28 )4 = 28·4 = 232 . Dlatego wg niego
65536 · 65535 = −65536
bo
65536 = 216
(216 · (216 − 1)) % 232 = (232 − 216 ) % 232 = −216 % 232
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 8
Arytmetyka komputerowa — działania
Ist. 10 rodz. ludzi: ci, co rozumieją liczby binarne i ci, co nie rozumieją.
Binarne dodawanie stałopozycyjne
41 + 27 = ?
41 = 25 + 23 + 20
27 = 24 + 23 + 21 + 20
przeniesienie:
11011
składnik 1:
41 czyli:
składnik 2:
27 czyli:
suma:
101001
+ 11011
1000100
czyli 26 + 22 = 68
Arytmetyka komputerowa — działania
Ist. 10 rodz. ludzi: ci, co rozumieją liczby binarne i ci, co nie rozumieją.
Binarne dodawanie stałopozycyjne
41 + (−27) = ?
zakładamy, że na liczbę całkowitą przypada 8 bitów
41 = 25 + 23 + 20
−27 = 256 − 27 = 229 = 27 + 26 + 25 + 22 + 20
przeniesienie:
1100001
składnik 1:
41 czyli:
składnik 2:
-27 czyli:
suma:
101001
+11100101
00001110
czyli 23 + 22 + 21 = 14
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 10
Arytmetyka komputerowa — działania
Binarne mnożenie stałopozycyjne
41 · 27 = ?
zakładamy, że na liczbę całkowitą przypada 8 bitów
41 = 25 + 23 + 20
27 = 24 + 23 + 21 + 20
przeniesienie:
1111000
czynnik 1:
41 czyli:
czynnik 2:
27 czyli:
suma:
101001
× 11011
101001
101001
000000
01001
+1001
01010011
czyli 26 + 24 + 21 + 20 = 83
Arytmetyka komputerowa — zapis zmiennopozycyjny
zapis
zapis
zapis
komputerowy tradycyjny przyrodniczy stałopozycyjny
5.041E9
5.041 · 109
5 041 000 000
5.041E-6
5.041 · 10−6
0.000 005 041
Liczby bardzo duże lub bardzo małe zapisuje się w postaci
znak·mantysa·10cecha
gdzie 1 ¬ mantysa < 10 i
cecha ∈ Z (liczba całkowita)
Wewnętrzna komputerowa reprezentacja różni się tym,
że podstawą nie jest 10 tylko 2.
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 12
Arytmetyka komputerowa — zapis zmiennopozycyjny
1. Przedstawić liczbę rzeczywistą x w postaci x = z · m · 2c , gdzie
• znak z jest albo −1 albo 1,
• mantysa m jest liczbą rzeczywistą taką że:
(
]
•|
m = 0 lub 1 ¬ m < 2,
−2
−1
0
• cecha c jest liczbą całkowitą.
[
1
)
2
O jednoznaczności takiego przedstawienia — patrz dalej.
2. Cechę zapisujemy binarnie w zwykły sposób (to jest liczba całkowita).
3. Mantysę zapisujemy podobnie, za podstawę biorąc jednak
m0 m1 m2 . . . reprezentuje liczbę
+∞
X
mi
i=0
2i
=
m0
m1
m2
+ 1 + 2 + ...
0
2
2
2
1
2
zamiast 2: ciąg
każde mi to albo 0 albo 1
(m0 = 1 zawsze).
4. Ucinamy nieskończony ciąg m0 m1 m2 . . . zależnie od liczby bitów przeznaczonych
na mantysę liczby.
Arytmetyka komputerowa — zapis zmiennopozycyjny
Przykład:
M
Załóżmy, że poświęcamy:
• na cechę: 8 bitów;
• na mantysę: 7 bitów;
• na znak liczby: 1 bit.
Jak przedstawić liczbę
1
7
?
1
2
4
8
1
= · 20 = · 2−1 = · 2−2 = · 2−3
7
7
7
7
7
≈
0
0
1
0 0 1
+
+
· 2−3
1+ + + +
2 4 8 16 32 64
znak
cecha
mantysa
0
11111101 1.001001
+
−3
8/7
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 14
Arytmetyka komputerowa — zapis zmiennopozycyjny
Przykład:
M
Załóżmy, że poświęcamy:
• na cechę: 8 bitów;
• na mantysę: 7 bitów;
• na znak liczby: 1 bit.
Liczba −20 31 :
61 0
61 4
61
=
·2 =
·2
3
3
48
≈
0
0
1
0 1 0
+
+
· 24
1+ + + +
2 4 8 16 32 64
znak
cecha
mantysa
1
00000100 1.010001
−
4
61/48
Arytmetyka komputerowa — zapis zmiennopozycyjny
Przykład:
M
Załóżmy, że poświęcamy:
• na cechę: 8 bitów;
• na mantysę: 7 bitów;
• na znak liczby: 1 bit.
Jaką liczbę przedstawia
poniższy układ bitów?
znak
cecha
mantysa
1
01001000 1.101001
−
72
105/64
1 0 1
0
0
1
− 1+ + + +
+
+
· 272
2 4 8 16 32 64
= −
64 + 32 + 8 + 1 72
105 72
·2 = −
· 2 = −105 · 266
64
64
≈ −7.74763251096 · 1021
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 16
Arytmetyka komputerowa — zapis zmiennopozycyjny
x = (−1)s · m · 2c
Własności:
• Jeśli cecha c ma k bitów, to −2k−1 ¬ c < 2k−1 , więc
k−1
2−2
k−1
¬ 2c < 22
1
¬ 2c < 2128 ≈ 3.4028237 · 1038 ).
(np. dla k = 8: 2128
Im więcej bitów ma cecha, tym większy zakres przedstawianych liczb.
• Jeśli mantysa m ma n bitów, to liczby można przedstawić z dokład1
nością do n−1 · 2c
2
(np. dla n = 7 dokładność do ok. 1.5625 · 10−2 · 2c ).
Im więcej bitów ma mantysa, tym większa dokładność (mniejsze
„ziarno”) przedstawianych liczb. Dokładność jest większa dla liczb bliskich zeru.
Arytmetyka komputerowa — zapis zmiennopozycyjny
Im więcej bitów ma cecha, tym większy zakres przedstawianych liczb.
Im więcej bitów ma mantysa, tym większa dokładność (mniejsze „ziarno”)
przedstawianych liczb.
Jeśli przeznaczymy
• 2 bity na cechę (wartości cechy: −2, −1, 0, 1) i
• 3 bity na mantysę
(wartości mantysy: 0, 44 , 54 , 64 , 74 ),
to potrafimy przedstawić następujące liczby nieujemne:
0
c=0
}|
c = −1
c = −2
z}|{ z
1
2
7
16
6
5 16
4
4 16
16
8
}|
5
8
6
8
{ z
1
7
8
4
4
5
4
6
4
c=1
}|
{ z
2
7
4
4
2
5
2
{
×4
7
2
6
2
. . . + tyle samo po ujemnej stronie zera.
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 18
Arytmetyka komputerowa — zapis zmiennopozycyjny
TWIERDZENIE: (jednoznaczność zapisu zmiennopozycyjnego)
M
Załóżmy, że: 1. c1 , c2 ∈ Z (l. całkowite), m1 , m2 ∈ R (l. rzeczywiste),
2. 1 ¬ m1 < 2 i 1 ¬ m2 < 2,
3. m1 · 2c1 = m2 · 2c2 .
Wtedy m1 = m2 i c1 = c2 .
Dowód twierdzenia o jednoznaczności:
Z ?? wynika
m 1 c1 − c2
m1 · 2c1
·2
=
1 =
c
m2 · 2 2
m2
Jeśli c1 = c2 , to 2c1 −c2 = 1 i m1 = m2 , koniec dowodu.
Jeśli c1 < c2 , to c1 ¬ c2 − 1, to 2c1 −c2 ¬ 21 , to 1 ¬
Ale to niemożliwe, bo m1 < 2 i m2 ­ 1.
m1
m2
· 12 , to
m1
m2
­ 2.
Arytmetyka komputerowa — działania
Binarne mnożenie zmiennopozycyjne
(m1 · 2c1 ) · (m2 · 2c2 ) = (m1 · m2 ) · 2c1 +c2
Przykład:
M
0.2125 · 972.8 = (1.7 · 2−3 ) · (1.9 · 29 )
= (1.7 · 1.9) · 26
= 3.23 · 26
(normalizacja wyniku)
= 1.615 · 27
= 206.72
Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 20
Arytmetyka komputerowa — działania
Binarne dodawanie zmiennopozycyjne
(m1 · 2c1 ) + (m2 · 2c2 ) = (m1 · 2c1 ) + ((m2 · 2c2 −c1 ) · 2c1 )
= (m1 + m2 · 2c2 −c1 ) · 2c1
Dodawanie wymaga „przeskalowania” jednego składnika; to jest skomplikowane i prowadzi do utraty precyzji.
Przykład:
M 972.8 + 0.2125 = 1.9 · 29 + 1.7 · 2−3
= 1.9 · 29 + (1.7 · 2−12 ) · 29
= 1.9 · 29 + 0.0004150390625 · 29
= (1.9 + 0.0004150390625) · 29
= 1.9004150390625 · 29
Arytmetyka komputerowa — działania
Utrata precyzji przy dodawaniu
Przykład:
M
Załóżmy, że poświęcamy na cechę: 8 bitów; na mantysę: 8 bitów.
(1.5 · 2100 ) + (1.5 · 2−100 ) = (1.5 · 2100 ) + ((1.5 · 2−200 ) · 2100 )
= (1.5 + 1.5 · 2−200 ) · 2100
Ale 1.5 · 2−200 w mantysie to dwa bity przesunięte w prawo o 200 pozycji;
a mantysa ma ich tylko 8; więc po tym przesunięciu wychodzi 0. Tak więc
(1.5 · 2100 ) + (1.5 · 2−100 ) = 1.5 · 2100
chociaż 1.5 · 2−100 6= 0.