|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Igor Glukharev 2:5035/26.31 07 Sep 2002 14:57:56 To : Alexander Golovlev Subject : Re: деление на 6 -------------------------------------------------------------------------------- 06 Sep 02 23:28:37 Alexander Golovlev --> Pertzel Family AG> ATmega103 нет деления, нет умножения. Вычисления не должны занимать AG> более 35 операций (операции типа: сдвиг, сложение, вычитание). PF> это одно, к вычислениям на "Рейнметалле" с моторчиком, AG> это другое, а для x86 я бы предложил AG> программно, сдвигами и сложениями реализовать AG> умножение на 1/6 . AG> AG> AG> Хорошо, а как умножить на 1/6 Если не очень важна точность, то можешь попытаться приблизить 1/6 другой более удобной дробью для реализации в заданной системе команд. Hапример: 1/6=11/66=~11/64. Тут я думаю все ясно как поделить на 64. Учитывая, что у тебя 1 байт, можно сделать немного иначе: 1/6=(1*43)/(6*43)=43/258=~43/256 Т.е. просто берем один байт и умножаем его на 43, получаем 2-байтовое число, от которого просто берем старший байт. 43(10)=101011(2) - т.е. 3 сдвига + несколько операций сложения и операций перемещения в памяти. Максимальная погрешность для байта: |1/6-43/256|*256=0.33333... Т.е. если тебе важна целая часть и ты собираешься делить на 6 только 1-байтовые числа, то результат _всегда_ будет точным. P.S. Hа крайний случай можно попробовать таблицей (если скорость _сильно_ критична). Bye! Igor --- F.I.P.S./32 v1.0r W95/NT [M] * Origin: (2:5035/26.31) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/33043d79dbb4.html, оценка из 5, голосов 10
|