Пардон, все выравнивание съехало
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Бендер++ 26 марта 2004 г. 13:45
В ответ на: Когда-то видел неплохой алгоритм, восстановил по памяти отправлено Бендер++ 26 марта 2004 г. 13:42



Untitled




/* Àëãîðèòì îñíîâàííûé íà ñäâèãàõ,
ïðè÷åì ïîñëå ïåðâûõ äâóõ ñäâèãîâ "áèòíûå" ñäâèãè çàìåíÿþòñÿ íà "áàéòíûå"
òàê ÷òî ðàáîòàåò áûñòðî. Êîëè÷åñòâî èòåðàöèé çàâèñèò îò òðåáóåìîé òî÷íîñòè,
íî òàê êàê òî÷íîñòü ðàñòåò â ãåîìåòðè÷åñêîé ïðîãðåññèè, òî èòåðàöèé íóæíî ìàëî.
×òîáû ïîëó÷èòü ìàêñèìàëüíóþ òî÷íîñòü ïðè çàäàííîé ðàçðÿäíîñòè "àêêóìóëÿòîðà a",
èñõîäíîå ÷èñëî ïåðåä öèêëîì æåëàòåëüíî ñäâèíóòü ïî÷òè (íóæåí çàïàñ äëÿ ïåðåíîñà)
äî óïîðà âëåâî. */

for (i = 1, i < (çàâèñèò_îò_òî÷íîñòè)), i >>= 1) {
if (1 == 2) continue; // ñäâèã íà 2 áèòà ïðîïóñêàåì
b = a >> i;
a = a + b;
}

/* Ïðèìåð 170/10

10101010
+ 10101010
---------
111111110 = 15,9375
+ 111111110
--------------
10000111011110 = 16,93359375
+ 10000111011110
-----------------------
1000011111111111011111 = 16,99974822998046875

10000,11111111111011111 = 16,99974822998046875
*/




Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru