dzielenieU2 v16 nieodtwarzajace

background image

DZIELENIE W SYSTEMIE U2

(DZIELENIE NIEODTWARZAJĄCE)

Pierwszym krokiem w dzieleniu nieodtwarzającym jest ustawienie dzielnika do pierwszego odejmowania/dodawania.
Dzielnik musi zostać przeskalowany tak, żeby być większym od dzielnej. Najłatwiej jest nam porównywać liczby
dodatnie więc powinniśmy zacząć od określenia wartości bezwzględnej dzielnej i dzielnika (wykorzystując
uzupełnienie).

Gdy mamy już moduł z dzielnej i dzielnika ustawiamy dzielnik tak, żeby dzielna była od niego mniejsza (jeśli byśmy
rozszerzyli dzielną zerami po prawej stronie). W otrzymanym wyniku musimy z spowrotem przesunąć przecinek
w o tyle miejsc, o ile przesunęliśmy dzielnik, ale w odwrotną stronę (najlepiej jest porównać pozycje przecinków
dzielnej i dzielnika, i na tej podstawie od razu widać przesunięcie). Najbardziej optymalne jest ustawienie dzielnika
najbardziej jak to możliwe na prawo (ale żeby warunek większości dzielnika od dzielnej był ciągle spełniony).

W poniższym przykładzie dzielnik został ustawiony właśnie w takim miejscu ponieważ
1011 0000 > 1011 1011. Wydaje się, że jest odwrotnie ale sprawa wyjaśnia się jeśli liczby zamienimy na ich wartości
bezwzględne, wtedy od razu widać, że 0101 0000 > 0100 0101.

Gdy dobrze ustawimy dzielnik, cały algorytm sprowadza się jedynie do odejmowania i dodawania. Na początku
musimy określić czy będziemy dodawać czy odejmować oraz jaką cyfrę otrzymaliśmy w wyniku po danej operacji.
ODEJMUJEMY zawsze gdy znak dzielnej i reszty jest ZGODNY, cyfrą wyniku jest wtedy 1,
DODAJEMY
zawsze gdy znak dzielnej i reszty jest PRZECIWNE, cyfrą wyniku jest wtedy 0.
Za pierwszą resztę należy przyjąć po prostu dzielną ale cyfry wyniku zapisujemy dopiero po odczytaniu pierwszej
reszty.
Uwaga: Jeśli otrzymana reszta (po rozszerzeniu) wynosi 0 to ZAWSZE kończymy dzielenie dopisując 1 jako
cyfrę wyniku.

Oczywiście aby określić czy dane liczby mają ten sam czy przeciwny znak, wystarczy porównać ich najstarszy bit
(pierwszy od lewej) ponieważ w kodzie U2 odpowiada on za znak danej liczby.

UWAGA:
Zamiast odejmować jakąś liczbę w kodzie U2, możemy dodać jej uzupełnienie. Jeśli masz kłopoty
z odejmowaniem w kodzie uzupełnieniowym zapisz sobie uzupełnienie dzielnej i dodawaj je zamiast odejmować
dzielną.

PRZYKŁAD 1:

101110,11

U2

10,11

U2

=

10111011

U2

1011

U2

=

−1⋅01000101

2

−1⋅0101

2

=

69

10

5

10

= 13,8

10

= 1101,1100

2

= 01101,1100

U2

Pogrubione są kolejne cyfry z dzielnej, o które rozszerzamy reszty.

Otrzymaliśmy wynik 0,1101 ale ponieważ dzielną przestawiliśmy o 4 pozycje w lewo (lub inaczej, ponieważ pomiędzy
przecinkiem dzielnej i dzielnika są 4 pozycje), powinniśmy przesunąć przecinek o 4 miejsca w prawo. Prawdziwym
wynikiem jest wiec 01101.

Krzysztof Adamski :: http://mr-k.namyslow.eu.org

1

0

1

0

0

0 1, 0

1

0 1, 0

1 uzupełnienia

0, 1

1

0

1

WYNIK przesunięty o 4 bity

1

0

1

1

1 0, 1

1

:

1 0, 1

1 ZNAKI ZGODNE: odejmujemy

-

1

0, 1

1

0

0

0

0

1

ZNAKI PRZECIWNE: 0 i dodajemy

+ (1) 1 0, 1

1

(1) 1

1

0

0

0

ZNAKI ZGODNE: 1 i odejmujemy

- (1) 1

1 0, 1

1

(1) 1

1

1

0

1

1

ZNAKI ZGODNE: 1 i odejmujemy

- (1) 1

1

1 0, 1

1

(0) 0

0

0

0

0

0

1

ZNAKI PRZECIWNE: 0 i dodajemy

+ (1) 1

1

1

1 0, 1

1

(1) 1

1

1

1

1

0

0

ZNAKI ZGODNE: 1 i moglibyśmy dodawać

background image

PRZYKŁAD 2:

101001,11

U2

0110,1

U2

=

10100111

U2

011010

U2

=

−1⋅01011001

2

011010

2

=−

89

10

26

10

= −3,423

10

= −1⋅11,0110

2

= 100,1010

U2

Dzielnik został tak ustawiony ponieważ 0110 1000 > 0101 1101 (uzupełnienie dzielnej).

Otrzymaliśmy wynik 1,001 ale jest on przesunięty o dwa bity więc prawdziwym wynikiem jest 100,1.

PRZYKŁAD 3:

1,0111

U2

0,1011

U2

=

10111

U2

01011

U2

=−

01001

U2

01011

U2

=−

9

10

11

10

=−0,81

10

=−0,11010001

U2

=1,00101111

U2

Krzysztof Adamski :: http://mr-k.namyslow.eu.org

2

0

1

0

1 1 1, 0

1

uzupełnienia

1, 0

0

1

WYNIK przesunięty o 2 bity

1

0

1

0 0 1, 1

1

:

0

1

1 0, 1 ZNAKI PRZECIWNE: dodajemy

+ 0

1

1 0, 1

(0) 0

0

0 1

1

ZNAKI ZGODNE: 1 i odejmujemy

- (0) 0

1

1 0

1

(1) 1

0

1 1

0

1

ZNAKI PRZECIWNE: 0 i dodajemy

+ (0) 0

0

1 1

0

1

(1) 1

1

1 0

1

0

1

ZNAKI PRZECIWNE: 0 i dodajemy

+ (0) 0

0

0 1

1

0

1

(0) 0

0

0 0

0

1

0

0

ZNAKI ZGODNE: 1 i moglibyśmy odejmować

0

1

0

0

1

uzupełnienie

1, 0

0

1

0

1

WYNIK przesunięty o 0 bitów bo 0,1011 > 0, 1001

1, 0

1

1

1

:

0, 1

0

1

1 ZNAKI PRZECIWNE: dodajemy

+ 0, 1

0

1

1

0

0

0

1

0

0

ZNAKI ZGODNE: 1 i odejmujemy

-

0

1

0

1

1

1

1

0

0

1

0

ZNAKI PRZECIWNE: 0 i dodajemy

+

0

1

0

1

1

1

1

1

0

1

0

ZNAKI PRZECIWNE: 0 i dodajemy

+

0

1

0

1

1

0

0

1

0

1

0

ZNAKI ZGODNE 1 i odejmujemy

-

0

1

0

1

1

1

1

1

1

1

0

ZNAKI PRZECIWNE: 0 i dodajemy

+

0, 1

0

1

1

0

1

0

0

1

0 ZNAKI ZGODNE: 1

background image

PRZYKŁAD 4a (ustawienie optymalne)

Otrzymaliśmy wynik 1,0(10) ale jest on przesunięty o 1 w prawo (przecinek dzielnika jest przesunięty o 1 w prawo
w stosunku do przecinka dzielnej) więc prawdziwy wynik otrzymamy przesuwając przecinek o jeden w lewo: 1,(10).

PRZYKŁAD 4b (ustawienie nieoptymalne – o jeden w lewo)

Liczby są te same co w poprzednim przykładzie ale tym razem nie przeskalowaliśmy dzielnika w prawo. Skoro nie
skalowaliśmy dzielnika to wynik jest rzeczywisty (nie skalujemy go). Jak widać wynik jest identyczny z poprzednim
ale wykonaliśmy o jedną operację odejmowania więcej.

Proponuję policzyć również przypadek, w którym dzielnik przesunięto o jeden w LEWO. Wynik będzie przesunięty ale
po przeskalowaniu równy tym otrzymanym w dwóch ostatnich przykładach. Zwiększy się również o jeden ilość
wykonywanych odejmowań.

WNIOSEK:
Przesunięcie dzielnika za bardzo w prawo nie zmieni wyniku a jedynie zwiększy ilość wykonywanych operacji
dodawania/odejmowania.

Krzysztof Adamski :: http://mr-k.namyslow.eu.org

3

0, 1

1

1

1 uzupełnienie

1

1 (1, 0) 1

WYNIK przesunięty o 1 bit w prawo

0, 0

1

0

1

:

1, 0

0

0

1 ZNAKI PRZECIWNE: dodajemy

+ 1 1, 0

0

0

1

1

1

0

1

1

0

ZNAKI ZGODNE: 1 i odejmujemy

-

1

1

0

0

0

1

0

0

1

0

1

0

ZNAKI PRZECIWNE: 0 i dodajemy

+ 1

1

0

0

0

1

1

1

0

1

1

0

i dostaliśmy okres (reszta taka sama jak ta )

0, 1

1

1

1 uzupełnienie

1, (1 0)

WYNIK rzeczywisty, nie przesunięty

0, 0

1

0

1

:

1, 0

0

0

1 ZNAKI PRZECIWNE: dodajemy

+ 1, 0

0

0

1

1

0

1

1

0

0

ZNAKI ZGODNE: 1 i odejmujemy

-

1

0

0

0

1

1

1

0

1

1

0

ZNAKI ZGODNE: 1 i odejmujemy

-

1

0

0

0

1

0

0

1

0

1

0

ZNAKI PRZECIWNE: 0 i dodajemy

+

1

0

0

0

1

1

1

0

1

1

0

i dostaliśmy okres (reszta taka sama jak ta )


Wyszukiwarka

Podobne podstrony:
dzielenie wielomianów
dzielenie z resztą
Dzielenie plików
dzielenie do 25 6
dzielenie do 25 3(1)
dzielenie do 100 1
Dzielenie'04
Dzielenie instrukcja
Tabliczka mnożenia na wesoło, Dla dzieci, Edukacja, mnożenie i dzielenie
Mnożenie i dzielenie do 20 - bombka, Matematyka(1)
dzielenie do 100 2
Kartkówka mnożenie i dzielenie pisemne
Pitrim Sorokin w swoim dziele
ROZPORZĄDZENIE RM z dnia 9 sierpnia 01 r w sprawie trybu postępowania przy składaniu wniosków dotyc

więcej podobnych podstron