условие сравнения целых чисел с погрешностью

alexei028
Offline
Зарегистрирован: 25.03.2018

Здравствуйте. Подскажите как реализовать сравнение двух переменных с погрешностью?

Допустим есть значение от переменного резистора "val", плавное нарастание другой переменной "i" от 0 до значения "val" по достижении равенства "i==val"  но с погрешностью 1-2 единици, выполняется определенный код.  Суть проблеммы в том что при достижении равенства значение от переменного резистора пляшет плюс минус 1-2 единици и система постоянно подстраивается, подтягивая переменную i до значения val, а нужно что бы при погрешности 1-2% или 1-2 единици условие равенства выполнялось. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

if (abs(i-val) < DVA_PROCENTA) { Serial.println "Все в порядке, это норма"; }

T.Rook
Offline
Зарегистрирован: 05.03.2016

abs(val-i)<delta

UPD: Упс.. sadman первый успел :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

sadman41 пишет:

if (abs(i-val) < DVA_PROCENTA) { Serial.println "Все в порядке, это норма"; }

Если "DVA PROCENTA", то 

if (abs(i-val)*200/(i+val) < 2/*DVA_PROCENTA*/)

alexei028
Offline
Зарегистрирован: 25.03.2018

Ууууффф чуток заморочено. Сделал как чайник наверное, простым тройным "или", но работает. Без лишней математики начинающим мозгам  проще понять

if ((i+1)==val||(i-1)==val||i==val) { все нормально}

sadman41
Онлайн
Зарегистрирован: 19.10.2016

alexei028 пишет:

if ((i+1)==val||(i-1)==val||i==val) { все нормально}

Вот так. 

А ты, динозавор, продолжай умничать дальше ))

Знанием арифметики четвертого класса он тут решил похвастаться. Проще надо быть! Три условия и всё.

ven-til
Offline
Зарегистрирован: 13.02.2018

alexei028 пишет:

Ууууффф чуток заморочено. Сделал как чайник наверное, простым тройным "или", но работает. Без лишней математики начинающим мозгам  проще понять

if ((i+1)==val||(i-1)==val||i==val) { все нормально}

if ((i-1)<=val&&(i+1)>=val) { все нормально}

В данном случае погрешность можно расширять.