Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 30.01.2012, 11:03  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: деление съедает ROM

yellow87, сначала домножить на 10 (100, 1000) и потом двигать, полученный результат поделить на 10 (100, 1000).
Реклама:
putmannn вне форума  
Непрочитано 30.01.2012, 11:07  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: деление съедает ROM

Сообщение от yellow87 Посмотреть сообщение
Easyrider83, если любое число меньшее 65536 сдвинуть на 16 разрядов вправо то получится нуль
Не всегда. Зависит от типа сдвигаемого числа.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 30.01.2012, 11:11  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: деление съедает ROM

При делении на константу, собственно операция деления и не нужна. Можно её заменить на умножение на число, обратное делителю.

Цитата:
Деление на константу можно сделать на обратное число. Чтобы произвести беззнаковое целочисленное деление q = x / d, вам вначале нужно посчитать число, обратное делителю, f = 2^r / d, где r определяет позицию двоично-десятичной точки (точка основания системы счисления). Затем нужно умножить x на f и сдвинуть полученный результат на r позиций вправо. Максимальное значение r равно 32+b, где b равно числу двоичных цифр в d минус 1. (b - это самое большое целое число, для которого 2^b ‹= d). Используйте r = 32+b, чтобы покрыть максильное количество возможных значений делимого x.

Этот метод требует некоторых приемов, чтобы скомпенсировать ошибки округления. Следующий алгоритм даст вам верные результаты для деления беззнакового целого чила с усечением, то есть тот же результат, что дает инструкция DIV (спасибо Terje Mathisen, который изобрел этот метод):

b = (количество значимых битов в d) - 1
r = 32 + b
f = 2^r / d
Если f - целое число, тогда d - это степень от 2: переходим к случаю A.
Если f - не целое число, тогда проверяем, меньше ли дробная часть f 0.5.

Если дробная часть f ‹ 0.5: переходим к случаю B.
Если дробная часть f › 0.5: переходим к случаю C.

случай A: (d = 2^b)
результат = x SHR b

случай B: (дробная часть f ‹ 0.5)
округляем f вниз до ближайшего целого числа
результат = ((x+1) * f) SHR r

случай C: (дробная часть f › 0.5)
округляем f вверх до ближайшего целого числа
результат = (x * f) SHR r
Целочисленное деление на константу (все процессоры)

Последний раз редактировалось AJScorp; 30.01.2012 в 11:15. Причина: Указал источник
AJScorp вне форума  
Непрочитано 30.01.2012, 11:27  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: деление съедает ROM

а какая вообще задача ? может и делить там ничего не надо.
putmannn вне форума  
Непрочитано 30.01.2012, 11:54  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Деление съедает ROM

Сообщение от yellow87 Посмотреть сообщение
Easyrider83, если любое число меньшее 65536 сдвинуть на 16 разрядов вправо то получится нуль
Да не может быть!
Easyrider83 вне форума  
Непрочитано 30.01.2012, 12:05  
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: Деление съедает ROM

я использую результат типа unsigned long int
а он в моём компиляторе только почему-то двухбайтный
(int - однобайтный)
поэтому при умножении его на 10, 100 и т.д. возникнет переполнение
то же самое и со сдвигом вправо

Последний раз редактировалось yellow87; 30.01.2012 в 12:08.
yellow87 вне форума  
Непрочитано 30.01.2012, 12:05  
skrynia
Прописка
 
Аватар для skrynia
 
Регистрация: 07.03.2009
Адрес: MN
Сообщений: 168
Сказал спасибо: 6
Сказали Спасибо 31 раз(а) в 21 сообщении(ях)
skrynia на пути к лучшему
По умолчанию Re: деление съедает ROM

Сообщение от Easyrider83 Посмотреть сообщение
Деление на 65536 равносильно сдвигу вправо на 16 разрядов.
Там почему-то деление на 65535.
__________________
  • Квадрат - это тоже прямоугольник, только более квадратный и не такой вытянутый
  • Двуугольник - это треугольник, только поломанный
  • Одноугольника не видел
skrynia вне форума  
Непрочитано 30.01.2012, 13:56  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Деление съедает ROM

Сообщение от yellow87 Посмотреть сообщение
я использую результат типа unsigned long int
Просто unsigned long
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 30.01.2012, 19:08  
Bumbarra
Вид на жительство
 
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
Bumbarra на пути к лучшему
По умолчанию Re: Деление съедает ROM

Сообщение от Easyrider83 Посмотреть сообщение
Да не может быть!
Отчего ж не может? Может, если нет разрядов под дробную часть.
Bumbarra вне форума  
Непрочитано 30.01.2012, 19:10  
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: Деление съедает ROM

unsigned long int
unsigned long
unsigned int
дают одинаковый двухбайтовый результат
yellow87 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление многоразрядных чисел MCS-51 angelborn Микроконтроллеры, АЦП, память и т.д 4 16.12.2011 22:22
Деление видео и аудио сигнала neox-neox Видеотехника 3 03.05.2011 22:02
Деление аналогового сигнала на ОУ AndreyVC Электроника - это просто 30 24.01.2011 14:01
Протеус съедает такт - глюк? maxNTF Proteus 1 26.10.2010 23:40
Как переделать cd-rom в dvd-rom wadim1980 Отвлекитесь, эмбеддеры! 16 31.07.2010 19:56


Часовой пояс GMT +4, время: 06:49.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot