Názory ke článku Řešíme zdrojový kód – algoritmus násobení
13. 2. 2012
Prima. Já tušil, že se to někam dostane.
Fakt je, že jsem to jen četl a myšlenkově nesledoval. Ale myšlenka a postup je názorný. Tak mohou vznikat efektivní algoritmy (kreslení kružnice, přímky, nalezení cesty nebo cyklu v grafu).
Jsem rád, že se někdo namáhá sebrat myšlenky, informace a nápad a pravidelně něco napíše pro ostatní (např. pan Tišnovský je až nepříjemně plodný). A velice hezky.
Poslední dobou se mi totiž zdá, že články vznikají jen proto, aby se člověk zviditelnil jako odborník a měl publikační činnost. Časem se na drobné faux pax zapomene a zbyde jen počet příspěvků.
#2 uf
Jsem rád že tu bylo zmíněno jméno pana Ťišnovského, protože je to opravdu formát a stejně jako Tebe mě fascinuje jeho publikační činnost, zajímavost a zpracování témat po odborné stránce.
Nicméně jsem pouhopouhý amatér a kvalit pana Ťišnovského zdaleka nedosahuju a nedovedeš si představit kolik práce mi dá napsat jenom takovýhle článek. :-) Taky z češtiny jsem maturoval za 4 a moje češtinářka by se nejspíš smála že zrovna já píšu. :-) To že tam nejsou chyby je dobrá práce korektora, hlavně čárky a vedlejší věty mi dělají problémy, časem se to zlepší, člověk se pořád něčemu učí.
I když nemám zase tolik času, budu určitě psát dál. Objevil jsem v tom jisté kouzlo které mi dříve unikalo. Kromě toho je příjemné, že když se tomu věnuje určité úsilí, dá se zvládnout napsat článek a výsledek práce je brzy vidět. Člověk z toho má pak radost když se to někomu líbí, díky všem co mě motivují. :-)
14. 2. 2012
Akorát bych konec dopracoval. Poslední zjištění znaménka se dělá rychleji pomocí bitových operací:
if ((a ^ b) < 0)
y = -y;
Ve strojovém kódu je to velmi rychlé, protože obvykle existuje přímo příznak na zjišťování, zda je číslo záporné.
Kromě toho jde algoritmus v určitých případech dále zrychlit občasným testem, zda není možné přeskočit několik bitů.
Miloslav Ponkrác
#4 Miloslav Ponkrác
Díky, zajímavé poznámky
Ukázky implementace jsou tam spíš proto aby člověk viděl
konkrétní jednoduchý a úplný kód, jako příklad použití odvozeného algoritmu.
Vzorový příklad vysoce optimalizovaného kódu to jistě není.
Pro praktickou aplikaci toho kódu je
další "low-level" optimalizace určitě možná.
I když i takhle je to prakticky použitelné.
Šlo mi ale spíš o "high-level" optimalizaci,
mám-li to tak nazvat. :-)
Do optimalizace na konkrétní platformu třeba nějaký
mikročip jsem se nepouštěl. Znám akorát assembler x86
a jeden čas jsem si hrál s MCU ATMega. Oba instrukci pro násobení mají,
bylo by asi směšné optimalizovat ten algoritmus pro ně :-)
Vím že třeba PIC nemají instrukci pro násobení, ale to zase není moje parketa.
Ledaže by někdo schopný kdo v tom dělá ten algoritmus napsal v assembleru PIC,
klidně do článku doplním odkaz na jeho stránky. :-)
To s tím přeskakováním a další urychlení můžou být zajímavé
a myslím že by to s podrobným vysvětlením krásně vyšlo na další článek, tenhle je už tak delší.
Myslím si, že to o co v článku jde, v článku je. Jistě se to dá rozšiřovat dál a dál, zdá se mi
to ale vymezené tak akorát. Možná někdy později na to navážu až nebudu vědět co bych. :-)
#5 uf
Ne, zatím jsem se k tomu nedostal,
ale mám to poznamenaný v šuplíku až budu dělat
něco okolo grafiky, že se na to podívám :-)
15. 2. 2012
„Pro praktickou aplikaci toho kódu je další "low-level" optimalizace určitě možná. I když i takhle je to prakticky použitelné. Šlo mi ale spíš o "high-level" optimalizaci, mám-li to tak nazvat.“
I já svými poznámkami zůstal na úrovni high-level optimalizace.
„Do optimalizace na konkrétní platformu třeba nějaký mikročip jsem se nepouštěl. Znám akorát assembler x86
a jeden čas jsem si hrál s MCU ATMega. Oba instrukci pro násobení mají, bylo by asi směšné optimalizovat ten algoritmus pro ně“
Ale nemají třeba algoritmus pro násobení řekněme 512 bajtových čísel. Dá se to naimplementovat tímto způsobem.
---
Článek je skvělý a skvěle popsaný princip základní algorimu násobení. Nijak jsem ho nekritizoval ani v nejmenším.
#8 Miloslav Ponkrác
Ok, doplnil jsem k tomu testu do článku poznámku.
To je fakt, na bignum aritmetiku by to šlo celkem snadno použít.
Tam by bylo ale možná lepší rovnou využít instrukce pro 32-bit násobení
místo násobení po jednotlivých bitech.
V pohodě, dík, myslím si stejně že nejlepší pro vývoj čehokoli je rovnice :
Ideální vývoj = (chvála + kritika) / 2
:-)
#8 Miloslav Ponkrác
A máte navíc pravdu, měl jsem lépe reflektovat v názvu článku jeho obsah. Název "Základní algoritmus násobení" nebo "Jednoduchý algoritmus násobení" by byl lepší. Teď už se to nedá změnit, beru si poučení do budoucna, dík. :-)