2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: эффективное сложение long и char
Сообщение21.05.2018, 21:36 
Заслуженный участник


20/08/14
11057
Россия, Москва
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 


07/10/15

2400
ну тогда попробую "залить", тем более, что всё готово ...

 Профиль  
                  
 
 Re: эффективное сложение long и char
Сообщение21.05.2018, 21:50 
Заслуженный участник


20/08/14
11057
Россия, Москва
Ну если Вы выберете в fuses работу с внешним кварцем выше 8МГц - то может ничего не заработать. И даже перепрошить обратно уже не сможете (я для таких случаев держу под рукой тривиальный генератор на одном инверторе на частоту в пару МГц). Это один из откровенных косяков Atmel, что fuses нельзя перешить (или стереть в заводское состояние) при выборе неработающего источника тактирования.
Если fuses не трогать , то операция что называется обратима и почти ничем не рискуете, пробуйте.

 Профиль  
                  
 
 Re: эффективное сложение long и char
Сообщение21.05.2018, 23:33 


07/10/15

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

 Профиль  
                  
 
 Re: эффективное сложение long и char
Сообщение28.05.2018, 15:39 


27/08/16
9426
Dmitriy40 в сообщении #1313960 писал(а):
Ещё отличие может где-то вылезти если вы будете смешивать операции со знаком и без знака, компилятор будет ругаться (предупреждениями, не ошибками).
Не зря компилятор выдаёт эти предупреждения, совсем не зря. Если в выражении присутствует вычитание или умножение, результат вычисления может оказаться неожиданно ошибочным. Не стоит пользоваться беззнаковой арифметикой без нужды и не понимая всех последствий.

 Профиль  
                  
 
 Re: эффективное сложение long и char
Сообщение28.05.2018, 16:32 
Заслуженный участник


20/08/14
11057
Россия, Москва
realeugene
Я это прекрасно знаю. И всегда точно знаю где у меня знаковая, а где беззнаковая арифметика. И когда их смешиваю - ставлю ручное приведение типов ровно в нужном (и безопасном) месте. При компиляции у меня почти всегда отсутствуют и ошибки и предупреждения (почти т.к. иногда проще забить на конкретный warning чем объяснить компилятору что код правильный). Так что совет не по адресу.

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

 Профиль  
                  
 
 Re: эффективное сложение long и char
Сообщение28.05.2018, 17:05 


27/08/16
9426
Dmitriy40 в сообщении #1315560 писал(а):
в любой арифметике могут быть ошибки вычислений

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group