🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2117

Re: Algorytm szybkiego mnozenia - podnoszenie do kwadratu

#2117
From: Andrzej Grażyński
Date: Sun, 14 Mar 2010 20:22
42 lines
2455 bytes
Michoo pisze:
> roxy pisze:
>> Witam
>> Czy ktos moze mi podac namiary na algorytm szybkiego mnozenia dwoch 
>> liczb 16bitowych.
>> Dokladnie chodzi o pomnozenie liczby A przez samą siebie czyli AxA 
>> (podnoszenie do potęgi 2).
>> Do dyspozycji mam mikrokontroler 8bit i mozliwosc wykonywania 
>> dodawania, odejmowania i mnozenie dwoch liczb 8 bit.
>> Moze jest jakas własciwośc podczas podnoszenia do kwadratu liczby 
>> ktorą mozna by wykorzystać i przyspieszyć znacząco obliczenia? (tak 
>> jak np podczas mnozenia liczby A x 4 to to samo co  a<<2 a znaczaco 
>> brzyspiesza działanie).
>>
> Ztcw to jedyne co możesz zrobić to rozbić liczbę na 2 części:
> X = (A*2^8 + B)
> X^2 = (A*2^8 + B)*(A*2^8 + B)
> rozpisać i poupraszczać - będą 4 mnożenia i dodawania.(O ile tylko ten 
> uC daje wynik mnożenia na 16 bitach a dodawania przynajmniej na 9.)
> 

Jeśli wynik mnożenia liczb 8-bitowyh jest 16-bitowy, to Da się za pomocą 
3 mnożeń i 2 do 5 dodawań. Niech

C := A*A
D := A*B
E := B*B

(C, D, E to 16-bitowe słowa, Lo(0 i Hi() to odpowiednio mniej i bardziej 
znaczaca część słowa).


Hi(C) := Hi(C) + Lo(D), jeśli powstaje przeniesienie to Lo(E) := Lo(E) + 
1 (jeśli procesor ma rozkaz inkrementacji to można go wykorzystać), 
jeśli tym razem powstanie przeniesienie, to Hi(E) := Hi(E) + 1, i tu 
przeniesienie nie ma prawa powstać

Lo(E) := Lo(E) + Hi(D), gdy powstaje przeniesienie, to Hi(E) := hi(E)+1


Ostatecznie iloczyn tworzą bajty Hi(E), Lo(E), Hi(C), Lo(C) (w 
kolejności od MSB do LSB)
Technical Details
Message-ID: <hnjgiu$u1q$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
References: <hmep02$m1i$1@news.onet.pl> <hmeqkc$qmp$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
From: Andrzej Grażyński <grazynsk@petex.com.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: Algorytm szybkiego mnozenia - podnoszenie do kwadratu
Date: Sun, 14 Mar 2010 21:22:34 +0100
Organization: http://onet.pl
Lines: 54
Message-ID: <hnjgiu$u1q$1@news.onet.pl>
References: <hmep02$m1i$1@news.onet.pl> <hmeqkc$qmp$1@news.onet.pl>
NNTP-Posting-Host: public-gprs56286.centertel.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1268598175 30778 91.94.92.152 (14 Mar 2010 20:22:55 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Sun, 14 Mar 2010 20:22:55 +0000 (UTC)
User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
In-Reply-To: <hmeqkc$qmp$1@news.onet.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit