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