Wstęp do programowania/Reprezentacja liczb/Ćwiczenia

From Studia Informatyczne

To są zadania na reprezentację liczb rzeczywistych.

Oglądaj wskazówki i rozwiązania
Ukryj wskazówki i rozwiązania

W poniższych zadaniach należy korzystać z 3-bitowej cechy i 4-bitowej mantysy. Przyjmujemy uzupełnieniową reprezentację cechy i mantysy.


Zadanie 1

Podaj reprezentację liczb \frac{2}{7} i \frac{4}{5}, a potem policz ich sumę i błąd względny.

Rozwiązanie 1

  1. Wyliczamy zapis binarny każdej z liczb:
    \frac{2}{7}=0.(010)    i    \frac{4}{5}=0.(1100).
  2. Ich reprezentacje wynoszą odpowienio 111 0101 i 000 0110. Warto zauważyć, że reprezentowane wartości to w istocie
    2^{-1}\cdot\frac{5}{8}=\frac{5}{16}    i    2^0\cdot\frac{3}{4}=\frac{3}{4}.
  3. Aby zsumować te liczby, należy przesunąć mantysę pierwszej z nich o 1 miejsce w prawo, otrzymując 00101 + 01100 = 10001. Aby zmieścić się z powrotem w ustalonej reprezentacji, należy przesunąć wynik o 1 miejsce w prawo i zaokrąglić go do 4 bitów, gubiąc ostatnie 2 bity 01.
  4. Otrzymujemy zatem nową cechę równą 1 i nową mantysę równą 0100, czyli w sumie reprezentację 001 0100, której dokładna wartość to 2^1\cdot\frac{1}{2}=1.

Błędy względne w naszym rozwiązaniu wynoszą: przy reprezentacji danych odpowiednio
\frac{|\frac{2}{7}-\frac{5}{16}|}{\frac{2}{7}}=\frac{\frac{3}{112}}{\frac{2}{7}}=\frac{3}{32}    i    \frac{|\frac{4}{5}-\frac{3}{4}|}{\frac{4}{5}}=\frac{\frac{1}{20}}{\frac{4}{5}}=\frac{1}{16},
a w wyniku dodawania
\frac{|\frac{38}{35}-1|}{\frac{38}{35}}=\frac{\frac{3}{35}}{\frac{38}{35}}=\frac{3}{38}.

W tym obliczeniu mieliśmy szczęście: błąd względny wyniku jest pomiędzy błędami względnymi reprezentacji składników.


Zadanie 2

Podaj reprezentację liczb \frac{5}{7} i \frac{3}{7}, a potem policz ich sumę i błąd względny.

Rozwiązanie 1

  1. Wyliczamy zapis binarny każdej z liczb:
    \frac{5}{7}=0.(101)    i    \frac{3}{7}=0.(011).
  2. Ich reprezentacje wynoszą odpowienio 000 0110 i 111 0111. Reprezentowane wartości to w istocie
    2^0\cdot\frac{3}{4}=\frac{3}{4}    i    2^{-1}\cdot\frac{7}{8}=\frac{7}{16}.
  3. Aby zsumować te liczby należy przesunąć mantysę drugiej z nich o 1 miejsce w prawo, otrzymując 01100 + 00111 = 10011. Aby zmieścić się z powrotem w ustalonej reprezentacji należy przesunąć wynik o 1 miejsce w prawo i zaokrąglić go (w górę) do 4 bitów.
  4. Otrzymujemy zatem nową cechę równą 1 i nową mantysę równą 0101, czyli w sumie reprezentację 001 0101, której dokładna wartość to 2^1\cdot\frac{5}{8}=\frac{10}{8}.

Błędy względne w naszym rozwiązaniu wynoszą: przy reprezentacji danych odpowiednio
\frac{|\frac{5}{7}-\frac{3}{4}|}{\frac{5}{7}}=\frac{\frac{1}{28}}{\frac{5}{7}}=\frac{1}{20}    i    \frac{|\frac{3}{7}-\frac{7}{16}|}{\frac{3}{7}}=\frac{\frac{1}{112}}{\frac{3}{7}}=\frac{1}{48},
a w wyniku dodawania
\frac{|\frac{8}{7}-\frac{10}{8}|}{\frac{8}{7}}=\frac{\frac{6}{56}}{\frac{8}{7}}=\frac{3}{32}.

W tym obliczeniu błąd względny wyniku jest większy niż błędy reprezentacji składników.


Zadanie 3

Podaj reprezentację liczb \frac{2}{10} i \frac{3}{10}, a potem policz ich sumę i błąd względny.

Rozwiązanie 1

  1. Wyliczamy zapis binarny każdej z liczb:
    \frac{2}{10}=0.0(0011)    i    \frac{3}{10}=0.0(1001).
  2. Ich reprezentacje wynoszą odpowienio 110 0110 i 111 0101. Reprezentowane wartości to w istocie
    2^{-2}\cdot\frac{3}{4}=\frac{3}{16}    i    2^{-1}\cdot\frac{5}{8}=\frac{5}{16}.
  3. Aby zsumować te liczby należy przesunąć mantysę pierwszej z nich o 1 miejsce w prawo, otrzymując 00110 + 01010 = 10000. Aby zmieścić się z powrotem w ustalonej reprezentacji, należy przesunąć wynik o 1 miejsce w prawo.
  4. Otrzymujemy zatem nową cechę równą 0 i nową mantysę równą 0100, czyli w sumie reprezentację 000 0100, której dokładna wartość to 2^0\cdot\frac{1}{2}=\frac{1}{2}.

Błędy względne w naszym rozwiązaniu wynoszą: przy reprezentacji danych odpowiednio
\frac{|\frac{2}{10}-\frac{3}{16}|}{\frac{2}{10}}=\frac{\frac{1}{80}}{\frac{2}{10}}=\frac{1}{16}    i    \frac{|\frac{3}{10}-\frac{5}{16}|}{\frac{3}{10}}=\frac{\frac{1}{80}}{\frac{3}{10}}=\frac{1}{24},
a w wyniku dodawania
\frac{|\frac{1}{2}-\frac{1}{2}|}{\frac{1}{2}}=0.

W tym obliczeniu mieliśmy naprawdę szczęście. Błędy reprezentacji zniosły się, dając dokładny wynik.