Re: dzielenie
Masz problem? Zapytaj na forum elektroda.pl
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
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
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
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
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.
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
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
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."
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.
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.
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