====== Architektury systemów komputerowych - Lista 7. ====== * {{:ask:09.lista07.pdf|Lista 7}} Program bc jest zdefiniowanym przez standard POSIX kalkulatorem o składni podobnej do tej z języka C. Można w nim (między innymi) w łatwy sposób konwertować wartości pomiędzy różnymi radiksami: obase=2 ibase=16 F43.12E 111101000011.0001001010 Uwaga, jeśli zmienimy ibase (input base) to **wszystkie** wpisywane liczby będą interpretowane w tym radiksie. Oto przykład: ibase=2 obase=10 1001 1001 ($10_2$ == $2_{10}$). Cyfry heksadecymalne muszą być wielkimi literami (małe litery to zmienne). ===== Zadanie 1. ===== |^ radix 2 ^ radix 10 ^ radix 16 ^| | 10'1111.0(1001) | 47.3 | 2F.4(C) | | 1111'0011'1110'0100'.0101'0001 | 62436.62890625 | F3E4.A1 | | 10'0110.1011 | 38.6875 | 26.B| ===== Zadanie 2. ===== *Zadanie sprowadza się do tego: skończona suma wyrażeń postaci $2^{-n}$ ma skończone rozwinięcie dziesiętne. *Suma takich wyrażeń da się zapisać jako ułamek o podstawie będącej potęgą dwójki: $2^m$. *Ułamki postaci $l/(10^k)$ mają skończone rozwinięcie dziesiętne. *Przemnóżmy przeto licznik i mianownik naszej sumy przez $5^m$. Matematycznie:\\ Część całkowita zawsze wyraża się skończoną liczbą cyfr. Rozważmy część ułamkową.\\ $0.a_1a_2a_3a_4...a_n = \sum_{i=1}^n2^{-i}a_i = \sum_{i=1}^n2^{-i}5^{-i}5^ia_i = \sum_{i=1}^n10^{-i} 5^i a_i = \sum_{i=1}^n \frac{5^i a_i}{10^i}$\\ Suma liczb, które w mianowniku mają potęgę 10 ma oczywiście skończone rozwinięcie dziesiętne. To zadanie wyjaśnia również, dlaczego ujemne potęgi dwójki wyglądają jak potęgi piątki (0.5, 0.25, 0.125...) ===== Zadanie 3. ===== * Trzy najmniejsze wartości: *$000'00000 = 2^{-3} * 1 = 0.125$ *$000'00001 = 2^{-3} * (1+1/32) = 0.12890625$ *$000'00010 = 2^{-3} * (1+1/16) = 0.1328125$ * Trzy największe wartości: *$111'11111 = 2^{4} * 1.96875 = 31.5$ *$111'11110 = 2^{4} * 1.93750 = 31$ *$111'11101 = 2^{4} * 1.90625 = 30.5$ *$31.5/31 = 1.01612903225806451612$ *$0.12890625/0.125 = 1.03125$ *$2^8 = 256$ ===== Zadanie 4. ===== *$1.2 = 011'00110$ *$5.75 = 101'01110$ 011'00110 + 101'01110 = 101'10111 ===== Zadanie 5. ===== * Udowodnimy, że nie jest łączne * Weźmy: *$x = 1_2 = 011'00000$ *$y = 1.00001_2 = 011'00001$ *$z = 0.00101_2 = 000'01000$ * pokażemy że (x+y)+z ≠ x+(y+z) *$x+y = 100'00000$ // <-przy dodawaniu mantys (1.0 + 1.0000**1**) ucieliśmy najmniej znaczacy bit, który okazał się rózny od zera// *$(x+y)+z = 100'00000 + 000'01000 = 100'00010$ //<- znowu ucieliśmy znaczący bit (przy przesuwaniu (dzieleniu przez $2^4$) mantysy 1.0**1**)// *$y+z = 011'00110 $ *$x+(y+z) = 011'00000 + 011'00110 = 100'00011 $ ===== Zadanie 6. ===== ===== Zadanie 7. ===== ===== Zadanie 8. ===== |^ liczba ^ znak ^ wykladnik ^ mantysa ^| |0.5 | 0 | 126 (-1)| (1)0 | |-17 | 1 | 127 (0) | (1)0001 | |-1/32 | 1 | 122 (-5) | (1)0 | |384 | 0 | 134 (7) | (1)1 | ===== Zadanie 9. ===== *$A'/A = 0,2228/0,22288 ~ 0,999641$ *$B'/B = 0,2221/0,22211 ~ 0,999954$ *$(A' - B')/(A-B) = (0,2228 - 0,2221)/(0,22288 - 0,22211) = 0,0007/0,00077 = 0,90909090...$ ===== Zadanie 10. ===== *$1'0111111'01110000'00000000'00000000_{IBM} = - 16^{63-64} * 0.7_{16} = - 16^{-1} * 7/16 = -7/256$ *$14.3 = E.4CCCC..._{16} = 1110.010011001100110011_{2} = 16^1 * 0.11100100110011001100110_{2} = 0'0000001'11100100'11001100'11001100_{IBM}$ *$0'1111111'11111111'11111111'11111111_{IBM} = 16^{127-64} * FFFFFF_{16} = 16^63 * 16777215 = 121416798527102489600204155203283368622156186611384678475703023142582517330754928640$ ===== Zadanie 11. ===== *Mantysa najmniejszej liczby będzie się zaczynała od 001 zamiast 0001. *Najwyższa potęga będzie 8^63 a nie 16^63. *$16^{63} * FFFFFF_{16} = 121416805764108066932466369176469931665150427440758720078238275608681517825325531136$. *$8^{63} *77777777_{8} = 13164036458569648337239753460458804039861886925068638906788872192$. {{tag>[listy_zadan]}}