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

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

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

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

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

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


 
Опции темы
Непрочитано 29.10.2010, 00:15  
roxfan
Временная регистрация
 
Регистрация: 25.11.2009
Сообщений: 61
Сказал спасибо: 1
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
roxfan на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от alexgap Посмотреть сообщение
OneTech, проверил ваш метод. К сожалению, он дает неверный результат даже для байта... Например, для 199 / 10 результат 20, что неверно, должно быть 19. А я было обрадовался новому методу оптимизации арифметических операций.
Просто после умножения надо прибавить корректирующий фактор. Как это всё вычислить, подробно расписано в книжке Hacker's Delight (русская версия "Алгоритмические трюки для программистов"). Алгоритм известен под названием "magic division", по этому термину можно найти кучу информации.
Реклама:

Последний раз редактировалось Falconist; 13.04.2011 в 23:09.
roxfan вне форума  
Сказали "Спасибо" roxfan
alexgap (29.10.2010)
Непрочитано 29.10.2010, 00:17  
OneTech
Вид на жительство
 
Регистрация: 09.10.2009
Сообщений: 356
Сказал спасибо: 21
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
OneTech на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Продолжение, вообщем вот в чём суть:
199 / 10 = 19,9
Для повышения точности будем не 256 / 10, а 65536 / 10 = 6553,6 ~= 6554

199 * 6554 = 1304246 или 0x13E6B6
Проанализуруем старший байт числа это 0x13 или 19 dec.
Конечно на этом можно и остановиться, но... если рассмотреть отбрасываемые 2 байта, то там можно увидеть число 0xE6B6 или 59062 dec
Теперь что-бы понять в какую сторону нужно скорректировать результат достаточно сравнить отбрасываемый остаток с 65536/2 или 32768, если это число 59062 больше или равно 32786 значит результат нужно скорректировать на +1, если меньше значит ничего не делать. Tеперь попробуйте с другими числами
__________________
Делая дело нужно в него верить на все 100%, иначе неизбежно будут возникать ошибки подпитывающие подсознательное сомнение.

Последний раз редактировалось OneTech; 29.10.2010 в 00:31.
OneTech вне форума  
Сказали "Спасибо" OneTech
alexgap (29.10.2010)
Непрочитано 29.10.2010, 00:19  
OneTech
Вид на жительство
 
Регистрация: 09.10.2009
Сообщений: 356
Сказал спасибо: 21
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
OneTech на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

roxfan опередил. Честно говоря уважаемый roxfan я до этого метода додумался сам, после того как придумал как обычное число перемножить на дробную константу не прибегая к float. Методика похожая.
__________________
Делая дело нужно в него верить на все 100%, иначе неизбежно будут возникать ошибки подпитывающие подсознательное сомнение.

Последний раз редактировалось OneTech; 29.10.2010 в 00:24.
OneTech вне форума  
Непрочитано 29.10.2010, 00:55  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от OneTech Посмотреть сообщение
45 тактов, только появилась погрешность, результат деления не 100`000, а 100`021 это недостаток такого метода.
У метода вообще то этого недостатка нет. Замена идет 1 к 1.
А вот делитель я Вам дал самый неудобный.
С ним смысла заменять деление умножением на 8-ми битнике нет. У меня вышло больше 1000 тактов.

Последний раз редактировалось Falconist; 13.04.2011 в 23:10.
kison вне форума  
Непрочитано 29.10.2010, 00:56  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от roxfan Посмотреть сообщение
Просто после умножения надо прибавить корректирующий фактор. Как это всё вычислить, подробно расписано в книжке Hacker's Delight (русская версия "Алгоритмические трюки для программистов").
Оттуда я и беру

Последний раз редактировалось Falconist; 13.04.2011 в 23:11.
kison вне форума  
Непрочитано 29.10.2010, 01:07  
OneTech
Вид на жительство
 
Регистрация: 09.10.2009
Сообщений: 356
Сказал спасибо: 21
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
OneTech на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
У метода вообще то этого недостатка нет. Замена идет 1 к 1.
А вот делитель я Вам дал самый неудобный.
С ним смысла заменять деление умножением на 8-ми битнике нет. У меня вышло больше 1000 тактов.
Я свои 45 тактов получил на 8-ми битке, только корректирующий фактор не учитывал, а вообще это ещё + ~6 тактов, против 1000.
__________________
Делая дело нужно в него верить на все 100%, иначе неизбежно будут возникать ошибки подпитывающие подсознательное сомнение.

Последний раз редактировалось Falconist; 13.04.2011 в 23:10.
OneTech вне форума  
Непрочитано 29.10.2010, 02:11  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от OneTech Посмотреть сообщение
Я свои 45 тактов получил на 8-ми битке, только корректирующий фактор не учитывал, а вообще это ещё + ~6 тактов, против 1000.
А попробуйте учесть. Особенно за 6 тактов.
Приведем цифры к единому знаменателю. Делимое 0-1000000 включительно, делитель 10. Это как бы уже прикладное применение имеет - как раз на индикатор что вывести например. Должно делиться точно для любого делимого из вышеприведенного диапазона. Вам кстати проще, число влезает в три байта, так что преимущество перед компилятором Си имеете - ему это не объяснишь.
У меня вышло ровно 75 тактов. Это с учетом загрузки делимого из памяти и выгрузки туда же результата. Так что тоже сделайте так же, чтоб одинаково было. Т.е. есть 4 ячейки ( у Вас может и три быть!), содержимое их надо поделить на 10 и туда же поместить.

Последний раз редактировалось Falconist; 13.04.2011 в 23:13.
kison вне форума  
Непрочитано 29.10.2010, 05:35  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Народ заканчивайте оффтопить, давайте по делу.
zheleznjakov вне форума  
Сказали "Спасибо" zheleznjakov
EugenyAM (29.10.2010)
Непрочитано 29.10.2010, 08:51  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от zheleznjakov Посмотреть сообщение
Народ заканчивайте оффтопить, давайте по делу.
Так похоже STM8 никому не интересны. Как тут выше - пройдет год другой, кто то другой все грабли найдет и на форумах выложит и вот тогда...
Ну в завершении темы с делением - чтоб OneTech велосипед не изобретал закончу.
Выбираем степень двойки, чем больше, тем лучше. Величина зависит от максимального делимого. Удобно выбирать 16,32. Назовем - S
Делим 2^S на наш делитель. Если дробная часть больше или равна 0.5 то округляем вверх и ничего больше не делаем. Если меньше 0.5, то округляем вниз и будем прибавлять единичку к делимому. После умножения сдвиг вправо на S. Если S была кратна 8 можно обойтись без сдвига. На 8-ми битниках метод имеет слабое применение, хотя для относительно небольших делимых все в шоколаде. А вот если 16 миллионов на три поделить, уже не так приятно.
А STM8 я мучить продолжу, сразу после починки компа.

Последний раз редактировалось Falconist; 13.04.2011 в 23:13.
kison вне форума  
Непрочитано 29.10.2010, 09:14  
EugenyAM
Временная регистрация
 
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
EugenyAM на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
Так похоже STM8 никому не интересны. Как тут выше - пройдет год другой, кто то другой все грабли найдет и на форумах выложит и вот тогда...

А STM8 я мучить продолжу, сразу после починки компа.
Очень даже интересны, только пока спрашивать не о чем...
Камни и отладчик в пути, платы в производстве...

Как замена AVR очень даже актуально в свете новых цен на них.

Последний раз редактировалось Falconist; 13.04.2011 в 23:13.
EugenyAM вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
KiCAD-объявления и впечатления al_dan KiCAD 32 03.10.2016 17:02
Народ, посмотрите quasm, Как ваши впечатления? suri Proteus, KiCAD и другие ECAD 5 14.10.2009 11:57


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


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