Re: dzielenie



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "/\\_MS_/\\" <m____s_at_nospam_poczta.onet.pl>
Subject: Re: dzielenie
Date: Fri, 3 Dec 1999 07:23:31 +0100


Mam gotowe procedury dzielenia slow o roznych
dlugosciach zassane ze strony Elektroniki Praktycznej
moge podeslac

MS

Michal napisał(a) w wiadomości: <5EE14.17520$Oo3.423195_at_nospam_news.tpnet.pl>...
Witam wszystkich.
Czy ktos wie, jak na podstawie 8-bitowej instrukcji dzielenia w 8051
napisac
procedure do dzielenia liczby 16 bitowej przez 8 bitowa, albo jeszcze
lepiej
liczny 32 bitowej przez 16 bitowa?

kmich_at_nospam_polbox.com






--
WWW + e-mail + PERL + PHP - 320zl/rok - http://rubikon.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Wolcendorf <wolcendo_at_nospam_free.polbox.pl>
Subject: Re: dzielenie
Date: Fri, 03 Dec 1999 07:55:30 +0100


Witam,

/\\ MS_\\ wrote:

Mam gotowe procedury dzielenia slow o roznych
dlugosciach zassane ze strony Elektroniki Praktycznej
moge podeslac

Kłopot w tym, że człowiek chciał wykorzystać (nie wiem co prawda po co)
instrukcję 'div' 8051. A te procedury to standardowe procedury 'dzielenia w
słupku' (takie ze szkoły podstawowej... tylko w arytmetyce dwójkowej).
BTW- właśnie się zastanawiam, czy to 'div' do się do czegoś może
przydać???


--
Pozdrawiam,

Marcin Wolcendorf


'And all you touch, and all you see
Is all your life will ever be'
(C) by Waters, Gilmour, Wright



Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kraszewski <krashan_at_nospam_amiga.org.pl>
Subject: Re: dzielenie
Date: Fri, 03 Dec 1999 08:32:32 GMT


Marcin Wolcendorf wrote in
*"Re: dzielenie"*

Kłopot w tym, że człowiek chciał wykorzystać (nie wiem co prawda
po co) instrukcję 'div' 8051. A te procedury to standardowe procedury
'dzielenia w słupku' (takie ze szkoły podstawowej... tylko w
arytmetyce dwójkowej).

Bo takie są chyba najskuteczniejsze. Ja swego czasu męczyłem się z
dzieleniem i doszedłem do wniosku, że jeżeli mam do dyspozycji procedurę
dzielenia n-bitowej liczby przez n-bitową, to w niczym ona nie pomoże
przy większych dzieleniach. Natomiast na bazie dzielenia n+8 bitów przez
n można zrobić dzielenie "słupkowe" ale za każdym razem 8 bitów a nie
jeden tak jak w wyżej wspomnianych procedurach.

--
Grzegorz Kraszewski (Krashan/BlaBla) <krashan_at_nospam_amiga.org.pl>
Druga Strona BlaBla - http://amiga.org.pl/~krashan

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Wolcendorf <wolcendo_at_nospam_free.polbox.pl>
Subject: Re: dzielenie
Date: Fri, 03 Dec 1999 11:09:40 +0100


Witam,

Grzegorz Kraszewski wrote:

Bo takie są chyba najskuteczniejsze. Ja swego czasu męczyłem się z
dzieleniem i doszedłem do wniosku, że jeżeli mam do dyspozycji procedurę
dzielenia n-bitowej liczby przez n-bitową, to w niczym ona nie pomoże
przy większych dzieleniach. Natomiast na bazie dzielenia n+8 bitów przez
n można zrobić dzielenie "słupkowe" ale za każdym razem 8 bitów a nie
jeden tak jak w wyżej wspomnianych procedurach.

O'k, ale jak podzielić przez n+1 bitów mając dzielenie przez n? Może to
jest trywialne, a tylko ja tego na pierwszy rzut oka nie widzę?



--
Pozdrawiam,

Marcin Wolcendorf


'And all you touch, and all you see
Is all your life will ever be'
(C) by Waters, Gilmour, Wright




Poprzedni Następny
Wiadomość
Spis treści
From: jfox_at_nospam_friko6.onet.pl (J.F.)
Subject: Re: dzielenie
Date: 3 Dec 1999 10:46:35 GMT


On Fri, 03 Dec 1999 11:09:40 +0100, Marcin Wolcendorf <wolcendo_at_nospam_free.polbox.pl> wrote:
O'k, ale jak podzielić przez n+1 bitów mając dzielenie przez n? Może to
jest trywialne, a tylko ja tego na pierwszy rzut oka nie widzę?

To nie jest trywialne :-)
Chyba ze masz dodatkowe zalozenie ze podzielnik jest nieduzy.

A jak to nie jest n+1 tylko n+n ... to juz trzeba napisac programik
oberujacy na bitach i z DIV nie korzystajacy ..

J.

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Wolcendorf <wolcendo_at_nospam_free.polbox.pl>
Subject: Re: dzielenie
Date: Fri, 03 Dec 1999 14:50:29 +0100


Witam,

"J.F." wrote:

On Fri, 03 Dec 1999 11:09:40 +0100, Marcin Wolcendorf <wolcendo_at_nospam_free.polbox.pl> wrote:
O'k, ale jak podzielić przez n+1 bitów mając dzielenie przez n? Może to
jest trywialne, a tylko ja tego na pierwszy rzut oka nie widzę?

To nie jest trywialne :-)

Właśnie tak mi się zdawało... Zresztą intuicyjnie tak by wychodziło- jak się dzieli w
słupkach, to się dzieli przez cały dzielnik, a nie przez pierwsze kilka cyfr a przez
resztę trochę później... :-)


Chyba ze masz dodatkowe zalozenie ze podzielnik jest nieduzy.

Jak?


A jak to nie jest n+1 tylko n+n ... to juz trzeba napisac programik
oberujacy na bitach i z DIV nie korzystajacy ..

Hi, jak by było prosto zrobić dzielenie przez n+1 bitów, to równie prosto by było
zrobić dzielenie przez n+n bitów. Rekurencyjnie :-)) Tylko, że to może wyjść dłużej, niż
wielokrotne odejmowanie...
Algorytm z bitami i przesuwaniem jest uniwersalny, stąd warto go znać.


--
Pozdrawiam,

Marcin Wolcendorf


'And all you touch, and all you see
Is all your life will ever be'
(C) by Waters, Gilmour, Wright




Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kraszewski <krashan_at_nospam_amiga.org.pl>
Subject: Re: dzielenie
Date: Fri, 03 Dec 1999 21:34:43 GMT


Marcin Wolcendorf wrote in
*"Re: dzielenie"*

nie pomoże przy większych dzieleniach. Natomiast na bazie dzielenia
n+8 bitów przez n można zrobić dzielenie "słupkowe" ale za każdym
razem 8 bitów a nie jeden tak jak w wyżej wspomnianych procedurach.

O'k, ale jak podzielić przez n+1 bitów mając dzielenie przez n?
Może to jest trywialne, a tylko ja tego na pierwszy rzut oka nie
widzę?

Ja też tego nie widzę. Miałem na myśli coś takiego, że mając np.
dzielenie 16-bit/8-bit mogę łatwo zrobić dzielenie 24,32,40 itd. bitów
przez 8-bit. A jak trzeba rozszerzyć dzielnik to zaczynają się
kłopoty...

--
Grzegorz Kraszewski (Krashan/BlaBla) <krashan_at_nospam_amiga.org.pl>
Druga Strona BlaBla - http://amiga.org.pl/~krashan

Poprzedni Następny
Wiadomość
Spis treści
From: "JS" <jar0sz_at_nospam_polbox.com>
Subject: Re: dzielenie
Date: Sat, 04 Dec 1999 00:06:44 GMT


dzieleniem i doszedłem do wniosku, że jeżeli mam do dyspozycji procedurę
dzielenia n-bitowej liczby przez n-bitową, to w niczym ona nie pomoże
przy większych dzieleniach. Natomiast na bazie dzielenia n+8 bitów przez


Składanie operacji wielokrotnej precyzji jest możliwe. Mając dzielenie
2*n/n, można zbudować procedurę dla k*n/m*n. Dla dzielenia 8/8 jest n=4,
co nadaje się do operacji na niespakowanych BCD :) Och, ta wspaniała
architektura 8051 !

Dzielenie 2*n przez n (tylko pierwsza "cyfra" dzielnika) służy do
oszacowania kolejnej cyfry ilorazu. Potem - zgrubsza jak w dzieleniu
pisemnym; jeśli szacunek nie był poprawny, trzeba sprawdzić jeszcze co
najwyżej 2 możliwości (jak twierdzi autor mądrej książki, pan Knuth - "The
art of computer programming").

--
Jarosław Szynal
"Tak, mam na ten temat swoje zdanie, ale się z nim nie zgadzam."


Poprzedni Następny
Wiadomość
Spis treści
From: jfox_at_nospam_friko6.onet.pl (J.F.)
Subject: Re: dzielenie
Date: Sat, 04 Dec 1999 18:27:00 GMT


On Sat, 04 Dec 1999 00:06:44 GMT, JS wrote:
Składanie operacji wielokrotnej precyzji jest możliwe. Mając dzielenie
2*n/n, można zbudować procedurę dla k*n/m*n. Dla dzielenia 8/8 jest n=4,
co nadaje się do operacji na niespakowanych BCD :) Och, ta wspaniała
architektura 8051 !

Dzielenie 2*n przez n (tylko pierwsza "cyfra" dzielnika) służy do
oszacowania kolejnej cyfry ilorazu. Potem - zgrubsza jak w dzieleniu
pisemnym; jeśli szacunek nie był poprawny, trzeba sprawdzić jeszcze co
najwyżej 2 możliwości (jak twierdzi autor mądrej książki, pan Knuth - "The
art of computer programming").

No nie bylbym pewien - jak dzielimy 9xxxx przez 1xx to pierwsza cyfra
wyniku jest od 4 do 9 ...

A przy n=4 to z uwagi na komplikacje programu przedkosc byc moze jest
mniejsza niz przetwarzanie po 1 bicie ..

J.



Poprzedni Następny
Wiadomość
Spis treści
From: "JS" <jar0sz_at_nospam_polbox.com>
Subject: Re: dzielenie
Date: Mon, 06 Dec 1999 19:35:39 GMT


Dzielenie 2*n przez n (tylko pierwsza "cyfra" dzielnika) służy do
oszacowania kolejnej cyfry ilorazu. Potem - zgrubsza jak w dzieleniu

Oszacowanie można poprawić biorąc pod uwagę po jeszcze jednej cyfrze
dzielnej i dzielnika.

pisemnym; jeśli szacunek nie był poprawny, trzeba sprawdzić jeszcze co
najwyżej 2 możliwości (jak twierdzi autor mądrej książki, pan Knuth -

No nie bylbym pewien - jak dzielimy 9xxxx przez 1xx to pierwsza cyfra
wyniku jest od 4 do 9 ...

OK. Nie wspomniałem, że w algorytmie jest założenie o normalizacji
dzielnika: pierwsza cyfra musi być >= podstawa notacji div 2.

Po dalsze szczegóły odsyłam do książki.

A przy n=4 to z uwagi na komplikacje programu przedkosc byc moze jest
mniejsza niz przetwarzanie po 1 bicie ..

Bardzo możliwe. Algorytm działa lepiej dla dużej podstawy notacji.


--
Jarosław Szynal
"Nie płacz, kiedy odjadę" - napis na tylnej szybie autobusu PKS.



Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Wolcendorf <wolcendo_at_nospam_free.polbox.pl>
Subject: Re: procedury aryt. z AVT (=?iso-8859-2?Q?by=B3o?=: dzielenie)
Date: Fri, 03 Dec 1999 08:26:59 +0100


Witam,

Dodatkowo: procedura mnożąca 16 bitów przez 16 bitów jest zrobiona właśnie
tak, jak tego robić nie należy (zwłaszcza, jeśli mnożenie długo trwa- co nie do
końca tu pasuje...- żeby ponożyć 2 bajty za pomocą procedury mnożącej po jednym
bajcie potrzeba 3 a nie 4 mnożeń. Dlaczego? Bo:
X= a*256 + b
Y= c*256 +d
Chodzi o Z= X*Y.

Weźmy:
U= a-b
V= d-c
Wtedy:
Z= 256*(256+1)*a*c + 256*U*V + (256+1)*b*d
No i jest więcej dodawań, ale mniej mnożeń (a jeśli kto nie wie, dlaczego
'mnożenie' przez 257 nie jest problemem... to ja już mu na to nic nie poradzę).
Podobnie można zrobić dla liczb dłuższych- przy liczbach 4-bajtowych z 16
mnożeń robi się 9.

Żeby nie było wątpliwości- jestem taki mądry, bo właśnie się dorwałem do
książki "Mikroprocesor Z80" jerzego Karczmarczuka. :-)))


--
Pozdrawiam,

Marcin Wolcendorf


'And all you touch, and all you see
Is all your life will ever be'
(C) by Waters, Gilmour, Wright