2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: эффективное сложение long и char
Сообщение21.05.2018, 21:36 
Andrey_Kireew в сообщении #1313950 писал(а):
Или может не так?
Нет, не так, насколько я вижу из текста, отличия лишь в указании на беззнаковость числа и не более того. Для чисел до 2млрд отличий нет, для бОльших чисел отличия есть (например число 3 миллиарда не представимо в 32-х битах со знаком).
Ещё отличие может где-то вылезти если вы будете смешивать операции со знаком и без знака, компилятор будет ругаться (предупреждениями, не ошибками). По хорошему надо везде правильно преобразовывать тип руками, не надеясь что компилер всё поймёт правильно.
К типу источника тактирования это вообще никаким боком, он выбирается fuses и никак иначе. Здесь же лишь указание на его частоту, для процедур настройки таймеров и задержек. Если ими не пользуетесь, то эта срока вообще не особо нужна (тут не уверен, некоторые библиотеки требуют, хотя реально и не нужно).

Andrey_Kireew в сообщении #1313950 писал(а):
если я "залью" прогу для atmega8 в atmega8L то это будет считаться нормально, или без толку даже и пробовать?
Тут надо смотреть в чём именно отличия этих процессоров, я навскидку не помню. Обычно L версии более низковольтные и менее скоростные, в остальном же не отличаются и программа будет работать, но бывают и исключения, тем более с такими древними процами (а новые все без L и тем более V версий, зато с PA суффиксом, и иногда с бОльшим количеством периферийных устройств и новыми битами в старых регистрах). У меня в старом pdf указано что L версия от 2.7В против 4.5В, зато лишь до 8МГц против 16МГц. Насколько я вижу по pdf, они имеют одинаковый ID и значит для программатора ничем не отличаются (он просто не может их различить). Во всяком случае я не вижу в pdf таблицы отличий.

-- 21.05.2018, 21:40 --

PS. Пишите всё же не [syntax lang=C], а [syntax lang="c"] - в кавычках и маленькой, как предлагает кнопочка выбора подсветки синтаксиса, код с подсветкой приятнее выглядит.

 
 
 
 Re: эффективное сложение long и char
Сообщение21.05.2018, 21:43 
ну тогда попробую "залить", тем более, что всё готово ...

 
 
 
 Re: эффективное сложение long и char
Сообщение21.05.2018, 21:50 
Ну если Вы выберете в fuses работу с внешним кварцем выше 8МГц - то может ничего не заработать. И даже перепрошить обратно уже не сможете (я для таких случаев держу под рукой тривиальный генератор на одном инверторе на частоту в пару МГц). Это один из откровенных косяков Atmel, что fuses нельзя перешить (или стереть в заводское состояние) при выборе неработающего источника тактирования.
Если fuses не трогать , то операция что называется обратима и почти ничем не рискуете, пробуйте.

 
 
 
 Re: эффективное сложение long и char
Сообщение21.05.2018, 23:33 
Да нет, у него в fuses от 3 до 8 диапазон с внешним кварцем, я его и выбрал, так как у меня кварц пока только на 4 МГц, так что должно работать. Хотя, действительно, интересно - выставить 16МГц программатор не позволяет. В мануале что то смутно об этом сказано, вроде как ckopt в 1 нужно поставить. Ну я конечно поставил ... , но не из за этого, а просто чтобы генератор работал на полную мощность. Теперь уж что получится ...

 
 
 
 Re: эффективное сложение long и char
Сообщение28.05.2018, 15:39 
Dmitriy40 в сообщении #1313960 писал(а):
Ещё отличие может где-то вылезти если вы будете смешивать операции со знаком и без знака, компилятор будет ругаться (предупреждениями, не ошибками).
Не зря компилятор выдаёт эти предупреждения, совсем не зря. Если в выражении присутствует вычитание или умножение, результат вычисления может оказаться неожиданно ошибочным. Не стоит пользоваться беззнаковой арифметикой без нужды и не понимая всех последствий.

 
 
 
 Re: эффективное сложение long и char
Сообщение28.05.2018, 16:32 
realeugene
Я это прекрасно знаю. И всегда точно знаю где у меня знаковая, а где беззнаковая арифметика. И когда их смешиваю - ставлю ручное приведение типов ровно в нужном (и безопасном) месте. При компиляции у меня почти всегда отсутствуют и ошибки и предупреждения (почти т.к. иногда проще забить на конкретный warning чем объяснить компилятору что код правильный). Так что совет не по адресу.

PS.
realeugene в сообщении #1315553 писал(а):
Если в выражении присутствует вычитание или умножение, результат вычисления может оказаться неожиданно ошибочным.
К знаковости это отношения не имеет, в любой арифметике могут быть ошибки вычислений, и не только на указанных операциях, тривиальный пример: int16_t a = 32767+1 или abs((int16_t)-32768).

 
 
 
 Re: эффективное сложение long и char
Сообщение28.05.2018, 17:05 
Dmitriy40 в сообщении #1315560 писал(а):
в любой арифметике могут быть ошибки вычислений

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

Dmitriy40 в сообщении #1315560 писал(а):
Так что совет не по адресу.
Это не совет, это предупреждение, прежде всего, для других читателей темы. Не игнорировать этот ворнинг. Вы-то сами хорошо знаете про особенности беззнаковой арифметики, не сомневаюсь.

 
 
 [ Сообщений: 22 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group