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 . . .