odległość między ziemią a księżycem

Transkrypt

odległość między ziemią a księżycem
Rachunki na bardzo dużych i bardzo małych liczbach
Ile jest na Ziemi miejsca dla każdego człowieka?
Powierzchnia Ziemi: 510000000 km2 = 51000000000 ha
(trudno policzyć zera, lepiej podać jawnie ich liczbę)
5.1 · 108 km2 = 5.1 · 1010 ha
Liczba ludzi: ok. 7000000000 = 7 · 109
Na osobę przypada:
5.1
5.1 · 1010 ha
=
· 1010−9 ha ≈ 0.73 · 10 ha = 7.3 ha
9
7 · 10
7
(z tego tylko 2 ha na lądach i nie pod lodem)
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 2
Rachunki na bardzo dużych i bardzo małych liczbach
Jaka jest gęstość (masa właściwa) Ziemi?
Promień Ziemi: 6371 km = 6.371 · 103 km
Objętość Ziemi:
4
3
· π · (6.371 · 103 km)3 =
4
3
· π · 6.3713 · (103 )3 km3
= 1083.2 · 109 km3 = 1.0832 · 1012 km3
= 1.0832 · 1021 m3 = 1.0832 · 1027 cm3
Masa Ziemi: 5.9736 · 1024 kg = 5.9736 · 1027 g
Gęstość:
g
5.9736 · 1027 g
≈
5.515
1.0832 · 1027 cm3
cm3
Rachunki na bardzo dużych i bardzo małych liczbach
Ilukrotnie odległość między Ziemią a Księżycem przekracza średnicę atomu wodoru?
Odległość między Ziemią a Księżycem: ok. 480000 km = 4.8 · 108 m
◦
Średnica atomu wodoru: 0.6 A = 6 · 10−11 m
Odpowiedź:
4.8 · 108 m
= 0.8 · 108−(−11) = 0.8 · 1019 = 8 · 1018
−11
6 · 10 m
Skala Wszechświata:
http://htwins.net/scale2
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 4
Zmiennopozycyjny zapis liczby
• W rachunkach na bardzo dużych liczbach mamy kłopot z liczbami
zer. Pomyłka w liczbie zer grozi błędem znacznie większym niż zwykła
pomyłka arytmetyczna.
• Zamiast pisać te zera, praktyczniej jest podawać jawnie, ile ich jest.
Czyni się to zwykle zapisem zmiennopozycyjnym (floating point), czyli
przez reprezentację liczb rzeczywistych w postaci
znak·mantysa·10cecha
znak ∈ {−1, 1} , 1 ¬ mantysa < 10 , cecha ∈ Z (liczba całkowita) .
• W programach i danych dla komputera liczby rzeczywiste przedstawia
się tak samo; tylko zamiast „razy dziesięć do potęgi”, pisze się literę E
(exponent).
Np. zamiast 5.041 · 109 pisze się 5.041E9 .
Zmiennopozycyjny zapis liczby
Liczby bardzo duże lub bardzo małe zapisuje się w postaci
znak·mantysa·2cecha
znak ∈ {−1, 1} , 1 ¬ mantysa < 2 , cecha ∈ Z (liczba całkowita) .
Wewnętrzna komputerowa reprezentacja różni się tym,
że podstawą nie jest 10 tylko 2.
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 6
Zmiennopozycyjny zapis liczby
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.
Zmiennopozycyjny zapis liczby
Mantysa: ciąg m0 m1 m2 . . . mn−1 reprezentuje liczbę
def
M =
n−1
X
i=0
m0 m1 m2
mn−1
mi
=
+
+
+
.
.
.
+
2i
20
21
22
2n−1
każde mi to albo 0 albo 1; m0 = 1 zawsze.
TWIERDZENIE: Tak zdefiniowane M spełnia 1 ¬ M < 2 .
Dowód:
M =
m0 m1 m2
mn−1
1
0
0
0
+
+
+.
.
.+
­
+
+
+.
.
.+
= 1
20
21
22
2n−1
20 21 22
2n−1
M =
n−1
X
i=0
n−1
X 1
1 − ( 12 )n
1
mi
¬
=
<
1
i
2i
1− 2
1−
i=0 2
1
2
= 2
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 8
Zmiennopozycyjny zapis liczby
Przykład:
M
Załóżmy, że poświęcamy:
• na cechę: 8 bitów;
• na mantysę: 7 bitów;
• na znak liczby: 1 bit.
1
1
= · 20 =
7
7
0
≈ 1+ +
2
Jak przedstawić liczbę
1
7
?
2 −1
4
8
· 2 = · 2−2 = · 2−3
7
7
7
0 1
0
0
1
· 2−3
+ +
+
+
4 8 16 32 64
znak
cecha
mantysa
0
11111101 1.001001
+
−3
8/7
Uwaga: taka jest zasada, prawdziwy zapis w komputerze jest trochę inny.
Patrz dalej.
Zmiennopozycyjny zapis liczby
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
61 0
61 4
=
·2 =
·2
3
3
48
≈
0 1 0
0
0
1
1+ + + +
+
+
· 24
2 4 8 16 32 64
znak
cecha
mantysa
1
00000100 1.010001
−
4
61/48
Uwaga: taka jest zasada, prawdziwy zapis w komputerze jest trochę inny.
Patrz dalej.
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 10
Zmiennopozycyjny zapis liczby
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
Zmiennopozycyjny zapis liczby
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
k−1
¬ 2c < 22
2−2
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.
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 12
Zmiennopozycyjny zapis liczby
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
. . . + tyle samo po ujemnej stronie zera.
5
2
6
2
{
7
2
×4
Zmiennopozycyjny zapis liczby
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 pktu 3 wynika
m 1 c1 − c2
m1 · 2c1
·2
=
1 =
m2 · 2c2
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.
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 14
Arytmetyka zmiennopozycyjna — 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
= 1.615 · 27
= 206.72
(normalizacja wyniku)
Arytmetyka zmiennopozycyjna — 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
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 16
Arytmetyka zmiennopozycyjna — 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.
Prawdziwy zapis liczb typu double w C
http://inf.ug.edu.pl/~stefan/Dydaktyka/WstepDoProg/
Wyklady/08.obraz_bitowy_liczb.c
• znak: 1 bit
+: 0 −: 1
• cecha: 11 bitów
zamiast prawdziwej cechy zapisuje się zwiększoną o 210 − 1 = 1023
• mantysa: 52 bity
nie zapisuje się bitu m0 = 1
Przykład: 1 = + 1 · 20
M
+ cecha: 0 + 1023
mantysa: 1 − 1
00111111 11110000 00000000 00000000 00000000 . . .
Wykład 9. ARYTMETYKA KOMPUTEROWA, str. 18
Prawdziwy zapis liczb typu double w C
http://inf.ug.edu.pl/~stefan/Dydaktyka/WstepDoProg/
Wyklady/08.obraz_bitowy_liczb.c
• znak: 1 bit
+: 0 −: 1
• cecha: 11 bitów
zamiast prawdziwej cechy zapisuje się zwiększoną o 210 − 1 = 1023
• mantysa: 52 bity
nie zapisuje się bitu m0 = 1
Przykład: −7 = − 74 · 22
M
− cecha: 2 + 1023
mantysa: 74 − 1
11000000 00011100 00000000 00000000 00000000 . . .
Prawdziwy zapis liczb typu double w C
http://inf.ug.edu.pl/~stefan/Dydaktyka/WstepDoProg/
Wyklady/08.obraz_bitowy_liczb.c
• znak: 1 bit
+: 0 −: 1
• cecha: 11 bitów
zamiast prawdziwej cechy zapisuje się zwiększoną o 210 − 1 = 1023
• mantysa: 52 bity
nie zapisuje się bitu m0 = 1
Przykład: 0.4375 = + 47 · 2−2
M
+ cecha: −2 + 1023
mantysa: 74 − 1
00111111 11011100 00000000 00000000 00000000 . . .