почему не работает *100 / 100
- Войдите на сайт для отправки комментариев
Сб, 16/01/2016 - 21:57
есть код который вроде работает
if (getDelayTime(time_heat_start, t) >= (dt/100*p))
{
а вот такой код выдает туфту
p = p * 100;
if (getDelayTime(time_heat_start, t) >= (dt/100*p/100))
{
читал, что в арифмитических операциях тип берется из самого большого, и соответственно возможны проблеммы с переполнением.
использовоть тут float не хочется, сейчас везде int
как правильно поступать?
Типа так.
сделал так, вроде работает правильно
//************************************************************************************************* // процедура включает и выключает нагрев в зависимости от необходимой мощности // p - относительной мощность сотые доли % (допустимые значения от 0 до 10 000) // dt - общее время одного цикла вкл/выкл (в мсек, допустимые значения от 0 до 32 767), это время делется пропорционально параметра "p" // 100% мощность этого времени не должно приводить к перебегу температуры выше разумной погрешности, // по этому общее время одного цикла должно расчитыватся заранее. // t - текущее время //************************************************************************************************* void on_off_heat(int p, int dt, unsigned long t) { unsigned long t1 = 1; if (mode_heat == true) {t1 = t1*dt/100*p/100; } else if (mode_heat == false) { t1 = t1*dt/100*(100-p/100); } if (mode_heat == true) { // идет нагрев, нужно проверить может стоит остановится if (getDelayTime(time_heat_start, t) >= t1) { mode_heat = false; time_heat_stop = t; } } else if (mode_heat == false) { // идет охлаждение, нужно проверить может стоит запустится if (getDelayTime(time_heat_stop, t) >= t1) { mode_heat = true; time_heat_start = t; } } }