Article View: pl.comp.lang.asm
Article #2118Re: Algorytm szybkiego mnozenia - podnoszenie do kwadratu
From: Andrzej Grażyński
Date: Sun, 14 Mar 2010 20:25
Date: Sun, 14 Mar 2010 20:25
51 lines
2558 bytes
2558 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 4 do 10 dodawań. Niech C := A*A D := A*B E := B*B (C, D, E to 16-bitowe słowa, Lo() i Hi() to odpowiednio mniej i bardziej znaczaca część słowa). Powtarzamy 2 razy na stępujący fragment: 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ć ========= Powtarzamy 2 razy: 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:
<hnjgo0$u1q$2@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-mailReferences:
<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:25:20 +0100 Organization: http://onet.pl Lines: 62 Message-ID: <hnjgo0$u1q$2@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 1268598337 30778 91.94.92.152 (14 Mar 2010 20:25:37 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Sun, 14 Mar 2010 20:25:37 +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