DZIELENIE W SYSTEMACH UZUPEŁNIENIOWYCH (ALGORYTM

Transkrypt

DZIELENIE W SYSTEMACH UZUPEŁNIENIOWYCH (ALGORYTM
DZIELENIE W SYSTEMACH UZUPEŁNIENIOWYCH
(ALGORYTM UNIWERSALNY)
Oto kolejne kroki algorytmu:
– Przesuń dzielnik na taką pozycję, żeby jego wartość bezwzględna była WIĘKSZA niż wartość bezwzględna
mnożnej (jeśli mnożna lub mnożnik są ujemne, najłatwiej je porównać po zamianie na uzupełnienia),
– Jeśli znak dzielnej i dzielnika są przeciwne to dodaj dzielnik do dzielnej (wynik powinien mieć zgodny znak
z dzielnikiem) i wynik przyjmij za resztę, pierwszą cyfrą jest -1 w danym systemie (największa dozwolona cyfra),
– Jeśli znak dzielnej i dzielna są zgodne, przyjmij dzielną za pierwszą resztę, pierwszą cyfrą jest 0,
– Rozszerz resztę o kolejną cyfrę z prawej,
– sprawdź ile razy dzielna zmieści się w rozszerzonej reszcie, cyfra ta jest kolejną cyfrą wyniku,
– odejmij od rozszerzonej reszty dzielną pomnożoną przez cyfrę wyniku,
– powtarzaj aż do uzyskania odpowiedniego przybliżenia.
Otrzymany wynik będzie przesunięty o tyle samo pozycji o ile przesunęliśmy dzielnik w pierwszym kroku. Należy
przeskalować go odwrotnie w celu otrzymania poprawnego wyniku.
PRZYKŁAD 1:
Dzielenie liczb w systemie U10.
954625 U10 −1⋅4537510
=
≈ −9,8920810=90,10792U10
4587 U10
458710
Kolejne cyfry rozszerzenia dzielnika zapisane zostały pogrubioną czcionką:
0
9
4
5
3
7
5
uzupełnienie dzielnej
9,
0
1
0
7
9
5
:
4
5
8
WYNIK przesunięty o 1 pozycję w lewo
5
4
6
2
+ (0) 4
5
8
7
(0) 0
0
4
9
5
dzielnik zmieści się 0 razy, kolejną cyfrą wyniku jest więc 0
0
0
0
0
odejmujemy 0 razy dzielnik, czyli 0
4
9
5
0
dzielnik zmieści się 1 raz, kolejną cyfrą wyniku jest więc 1
4
5
8
7
odejmujemy 1razy dzielnik, czyli 4587
0
3
6
3
0
dzielnik zmieści się 0 razy, kolejną cyfrą wyniku jest więc 0
0
0
0
0
odejmujemy 0 razy dzielnik, czyli 0
3
6
3
0
0
dzielnik zmieści się 7 razy, kolejną cyfrą wyniku jest więc 7
3
2
1
0
9
odejmujemy 7 razy dzielnik, czyli 32109
4
1
9
1
0
dzielnik zmieści się 9 razy, kolejną cyfrą wyniku jest więc 9
4
1
2
8
3
odejmujemy 9 razy dzielnik, czyli 41283
0
0
6
2
7
-
-
-
7 ZNAKI PRZECIWNE, dodaj dzielnik, pierwsza cyfra: -1 (9)
dodajemy dzielnik
0
Otrzymaliśmy wynik 9,01079. W pierwszym kroku przesunęliśmy jednak dzielnik o jedną pozycję w lewo więc teraz
w wyniku należy przesunąć przecinek o jedną pozycję w prawo. Poprawnym wynikiem jest więc 90,1079.
UWAGA:
Zamiast odejmować liczbę w systemie uzupełnieniowym, możemy dodać jej uzupełnienie. Upraszcza to
arytmetykę kiedy dzielnik jest ujemny.
UWAGA 2:
Jeśli w wyniku otrzymasz nagle resztę o znaku przeciwnym do dzielnej to na pewno popełniłeś błąd.
Krzysztof Adamski http://mr-k.namyslow.eu.org/
1
PRZYKŁAD 2:
Dzielenie liczb w systemie U2.
101110,11U2 10111011 U2 −1⋅01000101 2 6910
=
=
=
= 13,8 10 = 1101,11002= 01101,1100 U2
10,11U2
1011U2
−1⋅01012
510
Dzielna i dzielnik są liczbami ujemnymi. Trochę utrudnia to dzielenie ponieważ trzeba pamiętać, że żeby dzielnik
zmieścił się w reszcie, musi ona być MNIEJSZA niż dzielnik (wtedy jej wartość bezwzględna będzie większa ponieważ
będzie ona bliżej zera).
0
1
0
0
0 1, 0
0, 1
1
1
0
1
1
1 0, 1
1
:
1
0
1
1
+ 0
0,
0
0
1
0
1
1
1
- (1)
1
0
1
1
1
1
0
0
0
1
0
1
1
(1) 1
1
0
1
1
0
0
0
0
1
0
1
1
1
-
1
0
1
1
1
1
0
0
-
0 1, 0
1 uzupełnienie
WYNIK przesunięty o 4 bity
1 0, 1
1 ZNAKI ZGODNE, nie dodawaj dzielnika, pierwsza cyfra 0
nic nie dodajemy więc formalnie dodajemy 0
dzielnik zmieści się 1 raz (1001>0101)
dzielnik zmieści się 1 raz (1000>0101)
dzielnik zmieści się 0 razy (0101=0101)
dzielnik zmieści się 1 raz (1001>0101)
0
dzielnik zmieści się 1 raz (1000>0101)
Otrzymaliśmy wynik 0,11011 ale jest on przesunięty o 4 bity w lewo więc prawdziwym wynikiem jest 01101,1.
Liczenie tym algorytmem w systemie U2, kiedy dzielna i dzielnik są ujemne jest dość trudne i łatwo o pomyłkę.
Szacowanie czy dzielna zmieści się czy nie najłatwiej zrobić to na modułach (jak pokazano w nawiasach w powyższym
przykładzie).
PRZYKŁAD 3:
101001,11U2 10100111 U2 −1⋅01011001 2
89 10
=
=
=−
= −3,42310 = −1⋅11,0110 2= 100,1010U2
0110,1U2
011010U2
011010 2
26 10
0
+
-
1
0
1
1
1,
0
1
uzupełnienie
1,
0
0
1
0
0
1,
1
1
:
WYNIK przesunięty o 2 bity
1
0
1
0
0
1
1
0, 1
(0) 0
0
0
1
1
0
0
0
0
0
1
1
1
0
0
0
0
0
1
1
1
1
dzielnik zmieści się 1 raz
0
1
1
0
1
odejmujemy dzielnik
0
0
0
1
0
-
0
1
1
0, 1 ZNAKI PRZECIWNE: dodajemy dzielnik, cyfra to -1 (1)
dzielnik zmieści się 0 razy
dzielnik zmieści się 0 razy
0
dzielnik zmieści się 0 razy
Otrzymaliśmy wynik 1,0010 przesunięty o dwa bity w lewo. Prawdziwym wynikiem jest więc 100,10.
Krzysztof Adamski http://mr-k.namyslow.eu.org/
2

Podobne dokumenty