-
- Ещё есть вариант методом последовательного вычитания. На C ЙяР AVR тактов в 100-120 вписаться можно легко. AU08(541 знак., 24.03.2012 04:11 - 04:20)
- Если дихотомию применить,т.е. первым сравнивать сразу с величиной 'делитель - Юра(24.03.2012 10:18, )
- Если дихотомию применить,т.е. первым сравнивать сразу с величиной 'делитель сдвинутый влево 4' и вычитать соответственнно и биты результата ставить, то можно даже и быстрее. - Юра(24.03.2012 10:19, )
- пока вопрос решен, а там видно будет ) - whale(24.03.2012 12:49)
- Если дихотомию применить,т.е. первым сравнивать сразу с величиной 'делитель сдвинутый влево 4' и вычитать соответственнно и биты результата ставить, то можно даже и быстрее. - Юра(24.03.2012 10:19, )
- Если дихотомию применить,т.е. первым сравнивать сразу с величиной 'делитель - Юра(24.03.2012 10:18, )
- здесь об этом -> - m16_home(24.03.2012 00:00, ссылка)
- там тоже на константу делят - whale(24.03.2012 00:07)
- x/y == x*((2<<N)/y)>>N ? Для счёта денег и деления не на константу не очень годится, в остальных случаях вполне... - fk0(23.03.2012 23:50)
- у меня делитель не константа - whale(23.03.2012 23:53)
- 12 тактов. Проц угадай сам, а потом сам же перепиши на свой физтеховский :)) MBedder(434 знак., 23.03.2012 23:26 - 23:34)
- Смотреть в обменнике Hacker's Delight, он же Книга: Алгоритмические трюки для программистов Автор: Генри Уоррен. -> - Evgeny_CD(23.03.2012 23:23, ссылка)
- а озвучить тут можно ? ) - whale(23.03.2012 23:29)
- Там было тож: Точкa oпopы из дому(63 знак., 24.03.2012 17:01, )
- а озвучить тут можно ? ) - whale(23.03.2012 23:29)
- Берем славное число 65536, которое есть 2^16, и заранее преобразуем все делители к виду 65536/делитель, округленное до целого. А потом на это число множим в разрядной сетке long и отбрасываем младшие 2 байта. Ксения(205 знак., 23.03.2012 23:01)
- Ничего не понял ) вы предлагает составить таблицу на 3000 значений ? - whale(23.03.2012 23:05)
- Это случай, когда требуется делить на константу. Такое деление можно заменить на умножение. А если множитель заранее неизвестен, то операции деления не избежать. - Ксения(23.03.2012 23:30)
- а, это понятно ), увы тут все наоборот ... - whale(23.03.2012 23:37)
- Это случай, когда требуется делить на константу. Такое деление можно заменить на умножение. А если множитель заранее неизвестен, то операции деления не избежать. - Ксения(23.03.2012 23:30)
- Ничего не понял ) вы предлагает составить таблицу на 3000 значений ? - whale(23.03.2012 23:05)
- И делимое, и делитель меняются? Какой диапазон изменения? Требуемая точность? - SciFi(23.03.2012 22:56)
- делимое постояно, даже пусть будет 65536, делитель меняется от 200 до 3000, точность только целая часть, будет достаточно. - whale(23.03.2012 23:06)
- Если не ошибаюсь, это по сути 1/x, то есть от деления никуда не деться. Можно всякие аппроксимации, метод Ньютона и проч. - SciFi(23.03.2012 23:12)
- разложения числа еще дольше будет считать - whale(23.03.2012 23:15)
- ладно, изменим вопрос - whale(144 знак., 23.03.2012 23:19)
- дополнение whale(56 знак., 23.03.2012 23:38)
- А надо ли именно частоту и так часто? Может в алгоритме чего не того. Если всё-таки надо, то почему нельзя использовать деление? Если уж очень надо и процессор не умеет аппаратно делить, то может таки взять в руки ассемблер и написать деление в fk0(69 знак., 23.03.2012 23:53)
- умеет только аппаратно умножать ) whale(130 знак., 24.03.2012 00:04)
- Деление, случайно, нужно не для разгона/торможения с постоянным ускорением? Там вообще корень квадратный помнится. Но от этого всего можно избавиться: функцию можно аппроксимировать разложением в ряд тейлора. Причём достаточно первых двух членов. fk0(637 знак., 24.03.2012 10:48)
- корень пока не нужен, управление BLDC на каждом шаге как вы правильно заметили whale(66 знак., 24.03.2012 12:48)
- Это где-то аж 2..5% от потенциала 8-МГц 8-битника. Ты не просто не умеешь их готовить, а даже не знаешь, с какого бока к ним подойти :)) - MBedder(24.03.2012 00:42)
- Деление, случайно, нужно не для разгона/торможения с постоянным ускорением? Там вообще корень квадратный помнится. Но от этого всего можно избавиться: функцию можно аппроксимировать разложением в ряд тейлора. Причём достаточно первых двух членов. fk0(637 знак., 24.03.2012 10:48)
- умеет только аппаратно умножать ) whale(130 знак., 24.03.2012 00:04)
- Если частота вычисляется на каждом обороте и есть инерция, то метод итераций (Ньютона) очень в тему, так как всегда есть хорошее первое приближение. - SciFi(23.03.2012 23:40)
- не, надо простой и грубый способ - whale(23.03.2012 23:48)
- Ну, про таблицу уже сказано выше :-) - SciFi(23.03.2012 23:53)
- Кстати в защиту табличного метода хочу сказать: таблица может быть не такая уж и большая, если между отдельными элементами использовать линейную интерполяцию. И ещё один ньюанс. Если речь про двигатель, то вполне возможно что формулами не всё так fk0(122 знак., 24.03.2012 11:02)
- вроде успевает пока по алгоритму что я привел ниже, посмотрим как на всех режимах а там подумаем ) - whale(24.03.2012 12:46)
- ладно попробую пока так мож успеет... 17 тактов whale(1290 знак., 24.03.2012 00:00)
- Немного поправлю. Что-то у тебя неправильно с флагом C. Так как я не знаю всех условий задачи, особо вникать не буду. mazur(1082 знак., 24.03.2012 12:03)
- у меня вроде считает ) - whale(24.03.2012 12:45)
- Немного поправлю. Что-то у тебя неправильно с флагом C. Так как я не знаю всех условий задачи, особо вникать не буду. mazur(1082 знак., 24.03.2012 12:03)
- Кстати в защиту табличного метода хочу сказать: таблица может быть не такая уж и большая, если между отдельными элементами использовать линейную интерполяцию. И ещё один ньюанс. Если речь про двигатель, то вполне возможно что формулами не всё так fk0(122 знак., 24.03.2012 11:02)
- Ну, про таблицу уже сказано выше :-) - SciFi(23.03.2012 23:53)
- не, надо простой и грубый способ - whale(23.03.2012 23:48)
- А надо ли именно частоту и так часто? Может в алгоритме чего не того. Если всё-таки надо, то почему нельзя использовать деление? Если уж очень надо и процессор не умеет аппаратно делить, то может таки взять в руки ассемблер и написать деление в fk0(69 знак., 23.03.2012 23:53)
- дополнение whale(56 знак., 23.03.2012 23:38)
- ладно, изменим вопрос - whale(144 знак., 23.03.2012 23:19)
- разложения числа еще дольше будет считать - whale(23.03.2012 23:15)
- Если не ошибаюсь, это по сути 1/x, то есть от деления никуда не деться. Можно всякие аппроксимации, метод Ньютона и проч. - SciFi(23.03.2012 23:12)
- делимое постояно, даже пусть будет 65536, делитель меняется от 200 до 3000, точность только целая часть, будет достаточно. - whale(23.03.2012 23:06)
- все int - whale(23.03.2012 22:55)
- Ещё есть вариант методом последовательного вычитания. На C ЙяР AVR тактов в 100-120 вписаться можно легко. AU08(541 знак., 24.03.2012 04:11 - 04:20)