Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Atmega AVR микроконтроллер Fuse bit для тактирования 32768 кварцем http://www.cyberforum.ru/avr/thread2086670.html
Знатоки, подскажите, как выставить CKSEL на tiny 2313, чтоб задать тактирование от внешнего кварца 32768 Гц? В даташите: 0.4 - 0.9 Мгц 0.9 - 3.0 Мгц 3.0 - 8.0 Мгц 8.0 - 12 Мгц Про...
Помощь по макросам Atmega AVR микроконтроллер
Всем привет! Снова прошу вашей помощи, гиганты AVR :) Ребята, очень хочу научиться использовать макросы, но беда, не нахожу по ним уроки с нуля. Помогите, пожалуйста, понять вот эти строки: 1)...
Atmega AVR микроконтроллер Hapsim wanted
Форумчане, может есть у кого последняя версия Hapsyma, а то http://www.hitmix.at/hapsym/ кажется протух. Выложите куда-нибудь плз.
Atmega AVR микроконтроллер Режим захвата Подскажите, пожалуйста, доступен ли модуль захвата при работе Таймера1 (атмега328р)? Будет ли верхняя граница = OCR1x? Или таймер должен работать только в 4 или 12 режиме (СТС)? http://www.cyberforum.ru/avr/thread2086667.html
Atmega AVR микроконтроллер AtMega8, внешняя EEPROM и UART http://www.cyberforum.ru/avr/thread2086666.html
Всем привет. Нумбский вопрос, я новичок. Думаю над новой разработкой. Нужно послушать шину RS-485, и каждый байт записать в память. Если я для этого буду использовать ATMEGA8, успеет ли МК поймать...
Изменение приоритетов прерываний в Atmega328p Atmega AVR микроконтроллер
Столкнулся с проблемой которая требует чтобы текущий обработчик прерывания отработал без прерывания своей работы более высокоприоритетным прерыванием. Т.е. если в процессе обработки прерывания INT1,...
Atmega AVR микроконтроллер AVRstudio4 ASM. Адресация и инициализация EEPROM.
Есть кусок кода: ===== адреса переменных в EEPROM ===== .ESEG .org 0 EE_code_Unlock: .byte 2 EE_code_Service: .byte 2 EE_code_Test: .byte 2 EE_code_Educat: .byte 2 EE_Status: .byte 1...
Atmega AVR микроконтроллер Вопрос про общение с МК День добрый. Вот понадобилось реализовать установки параметров с помощью ПК, на ум лезет только передача команд такого типа "SIT DSTIME 20:50:10 17.01.2013 END" по USORT. Вопрос: Как обработать... http://www.cyberforum.ru/avr/thread2086663.html
Atmega AVR микроконтроллер Считать значение напряжения с нулевого канала АЦП http://www.cyberforum.ru/avr/thread2086662.html
Необходимо считать значение напряжения с нулевого канала АЦП. Какой АЦП выбрать? Может кто поможет в CodeVision сделать. Заранее спасибо за помощь!
Atmega AVR микроконтроллер Подмена стека Возникла такая задачка: при определенном прерывани необходимо СРОЧНО выполнить одну ПЕРВОСТЕПЕННУЮ и довольно громоздкую процедуру, и при ее выполнении оставить возмоность отрабатывать другим... http://www.cyberforum.ru/avr/thread2086661.html
putmom
0 / 0 / 0
Регистрация: 05.02.2012
Сообщений: 35
0

Деление на 10.

09.01.2013, 10:03. Просмотров 25441. Ответов 67
Метки (Все метки)

Нашел тут статейку по методам деления на 10 (http://we.iosyitistromyss.ru/Soft/pr...ye-chisla.html).
Заинтересовал метод сдвигами и сложениями.
Цитирую:
Код:
struct divmod10_t
{
uint32_t quot;
uint8_t rem;
};
inline static divmod10_t divmodu10(uint32_t n)
{
divmod10_t res;
// умножаем на 0.8
res.quot = n >> 1;
res.quot += res.quot >> 1;
res.quot += res.quot >> 4;
res.quot += res.quot >> 8;
res.quot += res.quot >> 16;
uint32_t qq = res.quot;
// делим на 8
res.quot >>= 3;
// вычисляем остаток
res.rem = uint8_t(n - ((res.quot << 1) + (qq & ~7ul)));
// корректируем остаток и частное
if(res.rem > 9)
{
res.rem -= 10;
res.quot++;
}
return res;
}

Выглядит страшно и непонятно, но на самом деле всё просто. Сначала умножаем исходное число на 0.8 или 0.1100 1100 1100 1100 1100 1100 1100 1100 в двоичном представлении. Очень удобно, что дробь периодическая и удалось обойтись всего пятью сдвигами и четырьмя сложениями. Далее делим то, что получилось на 8, сдвигая на 3 разряда вправо. Получается исходное число делённое на 10 с точностью до единицы из-за ошибок округления.

Сижу и не понимаю, как всё таки на 0.8 умножать ? Какие то сдвиги вижу в коде, но Си не понимаю =(
Разжуйте пожалуйста как на ассемблере умножить на 0.8.

Вернуться к обсуждению:
Деление на 10.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2013, 10:03
Готовые ответы и решения:

Задача про деление яблок (целочисленное деление)
Ребят,помогите с задачкой,как написать input.txt и output.txt? Помогите решить задачу. C++....

Умножение, деление и деление с остатком
Рассмотрим эти операции на примере. static void Main() { int i = 100, j = 15; double a =...

Деление знаковых чисел с выводом ошибки "Деление на ноль"
Собственно поставили передо мной задачу - написать прогу деления двух чисел, причем что бы...

Деление
Всем привет! Нужна помошь по математике :wacko: Нужно делить дробные числа. Максимальное число...

Деление
data SEGMENT a DW 20 b DW 6 c DW ? data ENDS code SEGMENT assume cs:code,ds:data...

67
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru