13.03.2013, 14:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от gary2007
|
Есть 20-ти битное число 1 048 575 ... нужно вывести ... только старшие 4 цифры, но при этом еще и округлить. Для приведенного примера должно высветить 1049.
Я делаю так: делю исходное на 10 без остатка,
|
Где-то ошибка - если из 1'048'575 нужно получить 1049, то почему делите только на 10?
Сообщение от niXto
|
если в результате сдвига выдвигается единица - прибавляй текущую степень двойки к результату.
|
Если я правильно понял описание, то так получится неверное округление - округлять-то нужно один раз.
__________________
There's always more than one way to skin a cat.
|
|
|
|
13.03.2013, 14:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от tempora
|
то почему делите только на 10?
|
Как иначе получить все цифры массива?
Хорошо, как правильно по вашему?
Исходное число от 0 до максимума.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
13.03.2013, 14:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: IAR Embedded Workbench
niXto, я сейчас думаю над тем, что вы написали, но на работе этого не дадут сделать. Только вечером, дома.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
13.03.2013, 14:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от gary2007
|
Исходное число от 0 до максимума.
|
То есть, если число не превышает 9999, то оно должно выводиться полностью?
__________________
There's always more than one way to skin a cat.
|
|
|
|
13.03.2013, 15:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: IAR Embedded Workbench
да нет же, только старшие 4-е из 7-ми.
9999=0009
с округлением 0010.
Как бы float, но с целым числом.
Я думал получить весь массив, (массивом удобно выводить), а потом пройтись по каждой цифре и округлить, младшие 3-и отбросить.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
13.03.2013, 15:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от gary2007
|
только старшие 4-е из 7-ми
|
Тогда можно itoa((i+500)/1000) использовать. Это целочисленный вариант выражения "i/1000+0.5", только в нем округление осуществляется до деления.
__________________
There's always more than one way to skin a cat.
|
|
|
|
13.03.2013, 15:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: IAR Embedded Workbench
Давайте чуть посчитаем на пальцах. У нас есть 20 битное число N и нам надо отобразить B= (N+500)/1000 - +500 - округление.
Число N - можно представить как А*1024 + R = 1000*A +24*A +R; Где A - старшие 10 бит числа N A=N››10, а R - младшие 10 бит числа N R=N&1023.
Итак B = A + (A*24+R+500)/1000;
Начальное приближение B=A;
A*24= A‹‹3 +A‹‹4 ;
Тогда пусть С= А ‹‹ 3+А ‹‹ 4 +600;
Но как мы знаем, С- можно представить как M*1024+R1.
Тогда B=B+M - второе приближение;
И наконец, если M*24+R1›1000, то B=B+1;
Как видите, никаких умножений и делений - банальные сдвиги и суммирование.
Причем все ложиться в в двухбайтовую арифметику.
Ну а как вывести число от 0 до 1050 на индикатор - это уж детская задача
|
|
|
|
13.03.2013, 15:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от Boba_spb
|
Ну а как вывести число от 0 до 1050 на индикатор - это уж детская задача
|
А предыдущее - недетская?
__________________
There's always more than one way to skin a cat.
|
|
|
|
13.03.2013, 16:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: IAR Embedded Workbench
Ну предыдущее как то реже встречается;
|
|
|
|
13.03.2013, 16:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от Boba_spb
|
как то реже встречается
|
Позиционная система записи - " реже встречается"? Ну-да, ну-да... начиная с четвертого ( кажется) класса, и - каждый день, с утра до вечера. Это, конечно, недостаточно часто.
__________________
There's always more than one way to skin a cat.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Подниму тему WinAVR vs IAR
|
oleg110592 |
Микроконтроллеры, АЦП, память и т.д |
5 |
24.10.2015 14:06 |
Часовой пояс GMT +4, время: 09:43.
|
|