Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 28.01.2008, 09:57   #31
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от day177
Сама функция float, возвращаемое значение int ...
В исходном варианте этой функции возвращаемое значение имеет тип int только на промежуточном этапе - перед умножением на 0.0625 результат предыдущих вычислений переводится во float. Я использую не умножение на 0.0625, а сдвиг вправо на 4 по той простой причине, что, при заявленной в ДШ точности в 2 или 3 градуса, выводить не то что третий, но даже первый знак после запятой - считаю излишним...
Если ты все же уперся в показ десятых - верни на место "...))*0.0625;"... и "фсё вернется в зад".
Реклама:
tempora вне форума  
Непрочитано 28.01.2008, 11:26   #32
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

т.е. используя
Код:
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 (т.е. с десятыми)? Так?
day177 вне форума  
Непрочитано 28.01.2008, 13:47   #33
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Нет, не так. В обоих случаях будет float, но в первом случае дробная часть заведомо равна нулю и её можно игнорировать.
tempora вне форума  
Непрочитано 29.01.2008, 12:42   #34
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

блин все равно какая-то фигня получается
day177 вне форума  
Непрочитано 29.01.2008, 14:26   #35
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию

Сообщение от tempora
Нет, не так. В обоих случаях будет float, но в первом случае дробная часть заведомо равна нулю и её можно игнорировать.
Код:
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])››4;
Откуда float возьмется? Сдвиг целого на 4 бита, равно как и деление целого на 16 не вызывает преобразования типов - результат также будет int.
kison вне форума  
Непрочитано 29.01.2008, 14:35   #36
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

Цитата:
Откуда float возьмется? Сдвиг целого на 4 бита, равно как и деление целого на 16 не вызывает преобразования типов - результат также будет int.
таки откуда взять float если сама функция возвращающая значение есть float?

Т.е. имеем:
Код:
float function (unsigned char *addr)
{
...
...
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
}
day177 вне форума  
Непрочитано 29.01.2008, 15:31   #37
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Сообщение от day177
[
таки откуда взять float если сама функция возвращающая значение есть float?
Шаман... вы можете возвращать что угодно, все равно это что-угодно приводится к типу флоат...
urry вне форума  
Непрочитано 29.01.2008, 17:43   #38
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от urry
... возвращать что угодно, все равно это что-угодно приводится к типу флоат...
Вот только "т-та- т-таа-раписса ни нада"! В сях есть неявное приведение типов, да, но не любые приведения типов разрешены!

Сообщение от kison, day177
Откуда float возьмется? ...результат также будет int
... таки откуда взять float?
А тебе, kison, и тебе , day177, пора перечитать избранные места из Кернигана-Ричи...
tempora вне форума  
Непрочитано 29.01.2008, 18:43   #39
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

Цитата:
day177, пора перечитать избранные места из Кернигана-Ричи...
да я не против. Только супруга и работа не шибко рады

Таки в результате
Код:
float function (unsigned char *addr) 
{ 
... 
... 
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625; 
}
будем иметь int или float?
day177 вне форума  
Непрочитано 29.01.2008, 19:44   #40
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Сообщение от tempora
неявное приведение типов, да, но не любые приведения типов разрешены!
А какие запрещены, плиз ??? Берем крайний случай - булевые значения и пишем что-то типо..
Код:
	float rrr(void)
	{
	bool z;
	z=0;
	return z;
	}
Больше всего, как маме родной, я верю вижуалю - дальше не ко мне, а к психоаналитику, не важно...

-- Прилагается рисунок: --

urry вне форума  
Закрытая тема

Закладки


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Большие отрицательные числа и АВР ua_gruzin Микроконтроллеры, АЦП, память и т.д 7 31.01.2009 11:41
Ввод/вывод дробного (десятичного) числа на семисегментник nigvil TTL и CMOS логика 27 03.01.2009 22:23
32-разрядные числа в 8-битном PIC dimmich Микроконтроллеры, АЦП, память и т.д 17 28.10.2007 04:27
преобразование числа для занесения его в регистр на PIC16F84 CERGEI1982 Микроконтроллеры, АЦП, память и т.д 9 11.01.2007 17:47
Числа с плавающей запятой 32бит Tcom Микроконтроллеры, АЦП, память и т.д 1 01.03.2006 17:37


Часовой пояс GMT +4, время: 23:55.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot