Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.01.2008, 09:57
|
#31
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от day177
|
Сама функция float, возвращаемое значение int ...
|
В исходном варианте этой функции возвращаемое значение имеет тип int только на промежуточном этапе - перед умножением на 0.0625 результат предыдущих вычислений переводится во float. Я использую не умножение на 0.0625, а сдвиг вправо на 4 по той простой причине, что, при заявленной в ДШ точности в 2 или 3 градуса, выводить не то что третий, но даже первый знак после запятой - считаю излишним... ![Подмигивание](images/smilies/icon_wink.gif)
Если ты все же уперся в показ десятых - верни на место "...))*0.0625;"... и "фсё вернется в зад".
|
|
|
|
28.01.2008, 11:26
|
#32
|
Прописка
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
т.е. используя
Код:
|
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])››4; |
получим int (т.е. целое), а используя
Код:
|
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625; |
получим float (т.е. с десятыми)? Так?
|
|
|
|
28.01.2008, 13:47
|
#33
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Нет, не так. В обоих случаях будет float, но в первом случае дробная часть заведомо равна нулю и её можно игнорировать.
|
|
|
|
29.01.2008, 12:42
|
#34
|
Прописка
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
блин все равно какая-то фигня получается
|
|
|
|
29.01.2008, 14:26
|
#35
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от tempora
|
Нет, не так. В обоих случаях будет float, но в первом случае дробная часть заведомо равна нулю и её можно игнорировать.
|
Код:
|
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])››4; |
Откуда float возьмется? Сдвиг целого на 4 бита, равно как и деление целого на 16 не вызывает преобразования типов - результат также будет int.
|
|
|
|
29.01.2008, 14:35
|
#36
|
Прописка
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Цитата:
|
Откуда float возьмется? Сдвиг целого на 4 бита, равно как и деление целого на 16 не вызывает преобразования типов - результат также будет int.
|
таки откуда взять float если сама функция возвращающая значение есть float?
Т.е. имеем:
Код:
|
float function (unsigned char *addr)
{
...
...
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
} |
|
|
|
|
29.01.2008, 15:31
|
#37
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сообщение от day177
|
[
таки откуда взять float если сама функция возвращающая значение есть float?
|
Шаман... вы можете возвращать что угодно, все равно это что-угодно приводится к типу флоат...
|
|
|
|
29.01.2008, 17:43
|
#38
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от urry
|
... возвращать что угодно, все равно это что-угодно приводится к типу флоат...
|
Вот только "т-та- т-таа-раписса ни нада"! В сях есть неявное приведение типов, да, но не любые приведения типов разрешены!
Сообщение от kison, day177
|
Откуда float возьмется? ...результат также будет int
... таки откуда взять float?
|
А тебе, kison, и тебе , day177, пора перечитать избранные места из Кернигана-Ричи...
|
|
|
|
29.01.2008, 18:43
|
#39
|
Прописка
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Цитата:
|
day177, пора перечитать избранные места из Кернигана-Ричи...
|
да я не против. Только супруга и работа не шибко рады
Таки в результате
Код:
|
float function (unsigned char *addr)
{
...
...
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
} |
будем иметь int или float?
|
|
|
|
29.01.2008, 19:44
|
#40
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сообщение от tempora
|
неявное приведение типов, да, но не любые приведения типов разрешены!
|
А какие запрещены, плиз ??? Берем крайний случай - булевые значения и пишем что-то типо..
Код:
|
float rrr(void)
{
bool z;
z=0;
return z;
} |
Больше всего, как маме родной, я верю вижуалю - дальше не ко мне, а к психоаналитику, не важно...
-- Прилагается рисунок: --
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:55.
|
|