|
Как рациональнее всего преобразовать float в int? |
|
|
|
Dec 21 2010, 12:33
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Господа, есть небольшая задачка. Работаю с дисплеем и тачскрином. Как вы сами понимаете, координаты дисплея и координаты тачскрина - это две большие разницы (или, как говорят в Одессе, четыре маленьких)) ).
координаты дислпея вычисляются следующим образом: х=touch_x*800/256 y=touch_y*480/256
Но полученный результат является float, а функция, куда будут переданы координаты берет int. Естественно, такой вариант как скажем Circle (touch_x*800/256, touch_y*480/256 .....) не прокатит.
Мне хочется с наименьшими процессорными затратами получить округленные числа типа int, как это сделать? Ибо способов существует несколько, а вот какой быстрее....
Спасибо.
Сообщение отредактировал zheka - Dec 21 2010, 12:34
|
|
|
|
|
 |
Ответов
|
Dec 21 2010, 13:29
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Цитата Вы, надеюсь, понимаете, что координаты вашего устройства отображения это сугубо целые числа? Подозревать человека, который в состоянии собрать отладочную плату и подключить с ней дисплей глупо. В свою очередь, я надеюсь что вы понимаете что произойдет если unsigned char умножить на 800. Итог - мой вариант работает, но безусловно тратит процессорное время. Ваш вариант работает как и предложенный резидентом.
Сообщение отредактировал zheka - Dec 21 2010, 13:33
|
|
|
|
|
Dec 21 2010, 14:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(zheka @ Dec 21 2010, 20:29)  Подозревать человека, который в состоянии собрать отладочную плату и подключить с ней дисплей глупо.
В свою очередь, я надеюсь что вы понимаете что произойдет если unsigned char умножить на 800.
Итог - мой вариант работает, но безусловно тратит процессорное время. Ваш вариант работает как и предложенный резидентом. Ну вы же нам исходя, видимо, из соображений секретности, даже не сказали, что за процессор/компилятор пользуете. Как вы там объявили свои х, тouch_x - тайна, покрытая мраком. У вас int, часом, не 16-бит? Так почему надо упорно лезть во float, а не применить, действительно, что-нибудь типа long (хотя это тоже загадка, что этот long на вашем процессоре из себя представляет)? Ну да, вы же в разделе AVR. int он и есть 16-бит. Сделайте так: Код х=(((long int)touch_x)*800L)>>8; y=(((long int)touch_y)*480L)>>8; FillEllipse(800-x, y, 10, 10, clRed);
|
|
|
|
Сообщений в этой теме
zheka Как рациональнее всего преобразовать float в int? Dec 21 2010, 12:33 _Pasha QUOTE (zheka @ Dec 21 2010, 19:33) Но пол... Dec 21 2010, 12:40 fantex Если touch_x и touch_y типа int, то и результат бу... Dec 21 2010, 12:44 rezident Зачем вам float вообще? Вычисляйте в целых числах.... Dec 21 2010, 12:45 zheka rezident, сейчас переварю, то что Вы написали, а п... Dec 21 2010, 13:04 sergeeff Вы, надеюсь, понимаете, что координаты вашего устр... Dec 21 2010, 13:11 rezident zheka, а вы дроби из курса начальной школы не забы... Dec 21 2010, 13:42 zheka Да нет же, я не о целых и дробях, я о том, что to... Dec 21 2010, 13:49 rezident Цитата(zheka @ Dec 21 2010, 21:48) ОДнако... Dec 21 2010, 13:50 zheka У меня CodeVision 2, процессор - atmega32
Сейчас п... Dec 21 2010, 15:53 777777 Цитата(zheka @ Dec 21 2010, 21:53) То что... Dec 21 2010, 16:13 sergeeff Цитата(zheka @ Dec 21 2010, 22:53) У меня... Dec 21 2010, 16:23 zheka КодsX=(int)((((long int... Dec 21 2010, 16:28 ReAl Цитата(zheka @ Dec 21 2010, 21:28) КодsX=... Dec 22 2010, 04:15 sergeeff Надеюсь вы поняли, что проблема была в ваших
Код... Dec 21 2010, 16:34 zheka Не совсем в этом причина.
800/256 - я так написал,... Dec 22 2010, 03:52 Сергей Борщ QUOTE (zheka @ Dec 22 2010, 08:52) Нельзя... Dec 22 2010, 04:03 ukpyr ЦитатаКстати, в полученном коде все-таки каждый ра... Dec 22 2010, 04:18 defunct Цитата(ukpyr @ Dec 22 2010, 09:18) вместо... Dec 29 2010, 20:57  Serj78 Я думаю Жеке не надо напоминать, что наш любимый C... Dec 31 2010, 16:09 zheka ukpyr
спасибо. Dec 22 2010, 04:27 ~phase вообще то на сколько я замечал то сдвиг для умноже... Dec 27 2010, 07:37  mempfis_ Цитата(~phase @ Dec 27 2010, 14:37) вообщ... Dec 27 2010, 07:48
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|