roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 23:14

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 12:31 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Такой вот вопрос.
Пишу программулинку маленькую и уже час наверное не могу понять, почему оператор if корректно не отрабатывается.
Код вот такой:
Код:
   // Declare your local variables here
   float V = -9.65;
   char digits[5] = {'','','','',''};
                             
   if (V >= 0) {
      digits[0] = 'E';
   } else {
      digits[0] = '-';
   };

Почему-то дает 'E', хотя V у нас меньше нуля.
При этом поэкспериментировал с вариантами кода:
Код:
   if (V < 0) {

Код:
   if (V == 0) {

Код:
   if (V > 0) {

Во всех случаях дает '-'.

Ничего не понимаю... :unknown: Скажите мне, что я дурак и не увидел примитивного, чтоб я успокоился уже. :cry:
"Бэн, это Данила. Ай нид хэлп!" (с)


Update: 2008.02.18 15:48
По итогам обсуждения нашли крайнего - косяк из-за того, что протеус стоит версии 7.2 SP2 (build 4602). На 7.1 SP2 build 3692 все работает.

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 12:44 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
эээ
а ты в F подставь ноль и проверь срабатывает ли условие на ноль?

имхо у тя в F минусика нету
мб тип переменной сменить?

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 12:53 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Маразм крепчал...
Новая порция тестов. Проинициализировал переменную V нулем.
Код:
   // Declare your local variables here
   float V = 0;
   char digits[5] = {'','','','',''};
                             
   if (V >= 0) {
      digits[0] = 'E';
   } else {
      digits[0] = '-';
   };


Результат аналогичный. Т.е. при условиях
Код:
if (V >= 0)

Код:
if (V <= 0)

дает 'E', а при условиях
Код:
if (V > 0)

Код:
if (V == 0)

Код:
if (V < 0)

дает '-'.
:crazy:

Добавлено спустя 1 минуту 30 секунд:
PS
Пользуюсь
CodeVisionAVR ver.1.25.8a Evaluation

Добавлено спустя 2 минуты 57 секунд:
Myp писал(а):
имхо у тя в F минусика нету
мб тип переменной сменить?


А на что сменить? С десятичной точкой есть только float и double, которые по сути одно и то же.

Думается, что весь косяк в том, что эти типы 32-битные.
Прийдется от них уйти. Но вообще обидно :)

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 13:26 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
Код:
float V = 0.0f;
//float V = -2.93f;

if (V <= 0.0f) {
}
else {
}

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 13:32 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
эммм

тоесть нуно добавлять буковку f ???

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 13:47 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Код:
// Declare your local variables here
   float V = 0;
   char digits[5] = {'','','','',''};
                             
   if (V >= 0) {
      digits[0] = 'E';  //!!!!!!!!!!!!!!убери эту точку с запятой!!!!
   } else {
      digits[0] = '-';
   };


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 14:02 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Мастер, там перед else стоит фигурная скобка, поэтому точка с запятой должна быть обязательно! Иначе синтакс эррор.

Добавлено спустя 9 минут 7 секунд:
Виталий, буковка f на результат не повлияла. Все так же не работает с отрицательными числами. Положительные и ноль отрабатывает нормально. Причем и без f - видимо я что-то ступил, когда предыдущий опыт с инициализацией нулем делал...

Проблема с отрицательными числами.
Причем signed int тоже не хочет... :sorry:

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 14:32 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Пардон перепутал с паскалем.

Добавлено спустя 6 минут 39 секунд:
Или я чета не то понял, но у меня все работает, С на работе тока CVavr, поэтому в качестве отладки использовал Мегу 16 и протеус все работает. Прив V=0 горит порта А0, при -2 горит А1.

Код:
// Declare your local variables here
float V = 0;
char digits[5] = {'','','','',''};

.................

while (1)
      {
      // Place your code here
   if (V >= 0)
   {
    PORTA.0=1;
   }
   else
   {
    PORTA.1=1;
   }
      };


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 15:13 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Мастер, а отрицательные?

Я тоже в протеусе тестирую, только мега восьмая...

Добавлено спустя 12 минут 20 секунд:
В общем, то ж самое, что и было.
Вот код:
Код:
void main(void)
{
   // Declare your local variables here
   signed int Voltage;

   init_avr();

   Voltage = -965;
   
   // Global enable interrupts
   #asm("sei")

   while (1)
   {
      if (Voltage >= 0) {
         PORTB.0=1;
         PORTB.1=0;
      } else {
         PORTB.0=0;
         PORTB.1=1;
      };
  };
}


В процедуре инициализации лежит сгенереный мастером (из CVavr, а не нашим, форумовским) код, так что в нем не должно быть влияющих на результат косяков.
В итоге, порт В всегда "1", хоть проверяю на "<=", хоть на ">="...

Блин, писец. На таком примитиве столько времени потерять! :o

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 15:26 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Цитата:
Мастер, а отрицательные?

так я ж написал -2, все работает.

Добавлено спустя 3 минуты 17 секунд:
и на -100 то же работает, ща попробую на мега 8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 15:28 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
1. Позырить листинг.

2. Проверить в VMLAB и заходит ли прога во внутрь { }

3. Сделать Voltage = -5;

4. Проверит в протеус на меге16


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 15:31 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Помнится в досовском Си надо было float.h присоединять. Попробуй, мож прокатит... :roll:
А вообще нах тебе плавающая точка? Делай просто double и радуйся...

_________________
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 15:35 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
короче вот.
все работает и на мега 8.


Вложения:
папка (2).rar [18.24 КиБ]
Скачиваний: 25
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 15:52 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Короче, взял код и симуляцию Мастера. Не перекомпилил даже. Не пашет.
Код там вот такой:
Код:
      // Place your code here   
      Voltage = 9;
     
      if (Voltage >= 0) {
         PORTB.0=1;
         PORTB.1=0;
      } else {
         PORTB.0=0;
         PORTB.1=1;
      };

      Voltage = -9;
      if (Voltage >= 0) {
         PORTC.0=1;
         PORTC.1=0;
      } else {
         PORTC.0=0;
         PORTC.1=1;
      };


А в протеусе получаю вот так.
Вложение:
.PNG
.PNG [ 6.64 КиБ | Просмотров: 2281 ]


Значит, косячит протеус. :( Версия 7.2 SP2 (build 4602)

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу въехать, почему условие If не пашет с float'ом
СообщениеДобавлено: 18 фев 2008, 16:07 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
7.1 SP2 build 3692


Вложения:
.JPG
.JPG [ 38.43 КиБ | Просмотров: 2012 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

Сейчас этот форум просматривают: Google [Bot] и гости: 0


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO