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

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

Отправлено Бендер++ 26 марта 2004 г. 13:42
В ответ на: Help.Быстрый алгоритм деления на 10? отправлено velik 26 марта 2004 г. 11:59

/* Алгоритм основанный на сдвигах,
причем после первых двух сдвигов "битные" сдвиги заменяются на "байтные"
так что работает быстро. Количество итераций зависит от требуемой точности,
но так как точность растет в геометрической прогрессии, то итераций нужно мало.
Чтобы получить максимальную точность при заданной разрядности "аккумулятора 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