AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
03.03.2019, 23:15
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Сообщение от my504
|
Погрешность никакого отношения к разрешающей способности не имеет.
|
Действительно. Она имеет отношение к здравому смыслу. И за нею нужно обязательно следить при операциях деления и прочих с фиксированной точкой, чреватых дробями. А при плавающей точке - нет такой нужды.
Сообщение от my504
|
Предлагаю засунуть свои амбиции себе в карман.
|
Вы уже это сделали со своими?
Сообщение от my504
|
Если мои прежние сообщения почитать за академичность
|
Я не взял в кавычки, считая, что говорил грамотному человеку, который понимает иронию. Хорошо, раз нет - замените "академичность" на "наукообразность".
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
04.03.2019, 05:17
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Сообщение от akegor
|
А при плавающей точке - нет такой нужды.
|
Если слежение за разрядностью вызывает проблемы, то не следует вообще заниматься МК.
Операция деления в реальных приложениях является крайне редкой, а умножение обычно происходит в единой разрядной сетке. Все это приводит к тому, что нежелание следить за разрядностью путем применения флоатов сильно раздувает код и так же сильно сдувает производительность. Это если в МК нет FPU. А даже если есть FPU, то в общем случае приводит к потере разрешения при равной разрядности вычислений. Последнее справедливо и для случая без FPU.
В сказанном мной нет ничего сложного и академичного. Желающие убедиться в этом, могут самостоятельно изучить вопрос.
Однако скажу, что НА САМОМ ДЕЛЕ ни за какой разрядностью в случае с фикспойнтом "следить" не требуется. Достаточно ВСЕ ОПЕРАНДЫ привести ОДИН РАЗ к единой разрядной сетке фикспойнта - тупо добавить нулей в младших (дробных ) байтах. И далее работать с ОДНОЙ ЕДИНОЙ разрядностью.
Последний раз редактировалось my504; 04.03.2019 в 05:33.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо my504 за это сообщение:
|
|
|
04.03.2019, 05:24
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
В догон. Широко распространенное мнение, что умножение, деление, возведение в степень и извлечение корня в плавучке являются экономичными и равными фикспойнту является ошибочным. Все эти действия приводят к неизбежной операции НОРМИРОВАНИЯ флоата, что добавляет расход ресурсов по сравнению с фикспойнтом.
Последний раз редактировалось my504; 04.03.2019 в 10:08.
|
|
|
|
04.03.2019, 07:35
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Сообщение от my504
|
приводят к неизбежной операции НОРМИРОВАНИЯ флоата, что добавляет расход ресурсов по сравнению с флоатом.
|
Несолидно, как-то... Да и
Сообщение от my504
|
И далее работать с ОДНОЙ ЕДИНОЙ разрядностью.
|
не внушает оптимизма.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
04.03.2019, 10:07
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Сообщение от akegor
|
Несолидно
|
Что конкретно несолидно?
Сообщение от akegor
|
не внушает оптимизма.
|
Что конкретно не внушает оптимизма?
Потрудитесь изрекать не бессмысленные междометия, а что-нибудь обоснованное...
|
|
|
|
04.03.2019, 21:11
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Сообщение от mimuh64
|
Я бы тоже советовал смотреть ассемблер, затем сначала сделать и сравнить, а не языком трепать... есть реализации как целочисленные, так и с флоат... Как по времени просчета так и по объему кода применяю только Целочисленные... точность одинаковая, просто нужно уметь...
|
Все правильно. Точность получается не хуже, чем float.
Мне, правда, лень было писать функцию на ассемблере, но я поменял тип переменных на unsigned long и написал свою функцию извлечения корня. Результат на скриншотах.
Последний раз редактировалось МВА; 04.03.2019 в 21:27.
|
|
|
|
05.03.2019, 05:50
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Сообщение от МВА
|
Точность получается не хуже, чем float.
|
ЛУЧШЕ, чем флоат. Примерно в 256 раз.
Извлечение корня легко реализуется алгоритмом последовательных приближений.
Лень переводить в классическую форму алгоритма, приведу ассемблер для PIC24 с комментариями:
Код:
|
;--------------------------------
; функция извлечения квадратного корня
; W0=SQRT[W1:W0]
;‹editor-fold defaultstate="collapsed" desc="SQRT"›
SQRT:
mov #0x8000, W5 ;единица в старшем разряде W5
clr W6 ;сбрасываем регистр последовательных приближений
LoopSQRT:
ior W6, W5, W6 ; W6=W6|W5
mul.uu W6, W6, W2 ; возводим в квадрат [W3:W2]=W6^2
sub W0, W2, W4 ;две строки 32-разрядного вычитания
subb W1, W3, W4 ;с целью сравнения
bra C, $+4 ; если квадрат меньше исходного, пропускаем одну строку
sub W6, W5, W6 ; W6=W5-W6 (иначе сбрасываем этот бит) можно xor
lsr W5, W5 ; правый логический сдвиг (следующий бит)
bra NC, LoopSQRT ;если нет переноса продолжаем цикл
mov W6, W0 ; результат в W0
return
;‹/editor-fold›
;-------------------------------- |
Последний раз редактировалось my504; 05.03.2019 в 06:47.
|
|
|
|
05.03.2019, 13:02
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Видно хреновый из меня программист.
Сегодня поэкспериментировал, в студии. Сравнил две программы, где использованы функции извлечения корня стандартная (double) и моя написанная (unsigned long).
Хоть точность и одинаковая но, если сравнить количество циклов и время выполнения (и это в трех строчках функции).....
Остальное на скриншотах.
Последний раз редактировалось МВА; 05.03.2019 в 13:13.
|
|
|
|
05.03.2019, 13:20
|
|
Прописка
Регистрация: 30.07.2006
Адрес: Фрязино, М.О.
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Наверное не стоит плодить деление...
Особенно если аппаратного нет. Да и с аппаратным оно не в 1 цикл выполняется.
Алгоритм негодный.
|
|
|
|
05.03.2019, 13:34
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Амперметр Atmega. Как устаканить??
Я это понял.
Можно, где у меня есть вычисления в float, заменить деления умножением.
Последний раз редактировалось МВА; 05.03.2019 в 13:39.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:11.
|
|