2015-09-02 3 views
-1

мой код имеет что-то вроде этого:переменные двойного сравнения типа всегда возвращает ложь

double TMR_HV ; 
.... 
TMR_HV =2.0; // in another part of my code 


void RTKAPI Tempos10(void * p) // task for timers 
{ 
    while(1) { 
     if (TMR_HV > 0.00) TMR_HV -= 0.01; 
     else TMR_HV = 0.00; 
     RTKDelay(1); 
    } 
} 

Условие if всегда ложно. Кто-нибудь может мне с этим помочь?

+0

переменной, как показано в размещенном коде, не инициализируется. Это инициализировано где-то еще? Если нет, то его значение может быть любым. –

+0

Возможно, что TMR_HV является NaN или + Inf – john

+0

, переменная является глобальной, и она инициализируется в 0.0, и когда мы помещаем точку прерывания на таймер, начальное значение равно 0.0, и оно запускается. когда переменная получает значение больше 0.0, оно начинает уменьшаться и никогда не останавливаться. он переходит в отрицательные значения. –

ответ

0

Важно, чтобы вы указали свою переменную TMR_HV не внутри другой функции. Он должен быть глобальным.

+0

Да, это глобальная переменная, и она объявляется следующим образом: double TMR_HV = 0.0; –

0

Я решил свою проблему таким образом. я создать эту функцию

enter code here 

INT DblComp (двойной А, двойная Б) { LONG32 Al; LONG32 bL; aL = (LONG32) (A * 1000,0); bL = (LONG32) (B * 1000,0); if (aL < bL) return (-1); else if (aL == bL) return (0); else return (1); }

тогда, когда мне нужно сравнить 2 двойных переменных я называю эту функцию

enter code here 
    if (DblComp(ReadWriteDisk_C, 0.00) == MAIOR)   ReadWriteDisk_C -= 0.01; else ReadWriteDisk_C = 0.00; 

Maior определяется как 1

Смежные вопросы