Решение уравнения
- Войдите на сайт для отправки комментариев
Вс, 20/05/2018 - 17:28
Подскажите пожалуйста как мне в ардуине решить уравнение:
37-(37-A)/(0,68-0,0014*B+0,5681)-0,29*A*(1-BR/100)
при A=28.10, B=45,50
Разложил по порядку. В комментариях после строки решение для точности в // 4 цифры | 2 цифры
temp1 = 37 - A; // 8,9 | 8,9 temp2 = 0,0014 * B; // 0,0637 | 0 temp3 = 0,68 - temp2; // 0,6163 | 0,68 temp4 = temp3 + 0,5681; // 1,1844 | 1,24 temp5 = B / 100; // 0,455 | 0,45 temp6 = 1 - temp5; // 0,545 | 0,55 temp7 = temp1 / temp4;// 7,5143 | 7,17 temp8 = 0,29 * A; // 8,149 | 8,14 temp9 = temp8 * temp6; // 4,4412 | 4,48 temp10 = 37 - temp7; // 29,4857 | 29.83 temp11 = temp10 - temp9; // 25,0445 | 25,35
На выходе у меня всегда ошибки inf. Ардуино выдает в temp7, temp10 и temp11 результат inf. Что я делаю не так?
весь код покажите
Подскажите пожалуйста как мне в ардуине решить уравнение:
37-(37-A)/(0,68-0,0014*B+0,5681)-0,29*A*(1-BR/100)
при A=28.10, B=45,50
Здесь нет уравнения.
На выходе у меня всегда ошибки inf. Ардуино выдает в temp7, temp10 и temp11 результат inf.
Что такое "inf"? И что с ним за ошибки?
А по сути, выведите результаты всех этих Ваших "разложений", возможно всё станет понятнее.
это и есть весь код, только сверху ещё double tempX = 0;
В общем-то пока просматривал код, решил поменять , на . и все заработало.
поменять , на . и все заработало.
Феерично!
Да "классика", чего уж там. Оператор запятая мать его .. :)
Что такое "inf"? И что с ним за ошибки?
Бесконечное значение. Обычно - результат деления на 0 или подобной ошибки.
Что такое "inf"?
Одно из конечного множества значений, которое может принимать переменная с плавающей точкой.
За "inf" спасибо, буду знать.
Погорячился. Оно конечно считает, но совсем не то, что ожидается. Табличку ожиданий могу приложить завтра, делал в экселе по этой же форуле. Т.е. при T=30 H=99 должен получить уже 28.8 а ардуина пишет только 23. Никак не пойму.
накапливаются ошибки округления. например, при R/100 не всегда получается то, что ты ажыдал. Правильнее писать R/100.0
Везде где были целые числа, дописал ".00", стало лучше но не совсем:
Т.е. местами врет значительно, с учетом необходимых пределов.
Вот тут excel-файлик с этой же формулой - ориентируюсь на него округляя до ближайшего значения. Может как-то можно повысить правильность? Вообще не понимаю в каком месте ардуина ошибается :(
Вообще не понимаю в каком месте ардуина ошибается :(
Плак.... Ошибается автор кода, а не ардуина =) это вам по секрету
Вы в показаниях путаетсь. Сначала у Вас будо A и B, в скетче T и R, а здесь уже T и H.
Давайте Вы напишете точно формулу, которую считаете и скажете, что и при каких параметрах у Вас получается.
И приведите текущий код, а то Бог его знает, что Вы там куда дописали.
116, 117 почему int а не float?
nik182
Сменил int на float, результат изменился практически незаметно.
ЕвгенийП
Здесь последний код. abtrth облегчал жизнь себе, в итоге всё и вся запутал.
ToRcH2565
Не отрицаю, с 6 класса с математикой не дружу, но проще все свалить на ардуину :)
pupesk. вам всего-то одну формулу надо подсчитать? Что мешает написать ее как есть. в одну строку?
eeti=37-(37-T)/(0,68-0,0014*R+0,5681)-0,29*T*(1-R/100);
Нафига вам эта фигова куча промежуточных переменных?
Здесь последний код. abtrth облегчал жизнь себе, в итоге всё и вся запутал.
Если это последний код, то смотрим на строку №135. Где обещанная Вами замена всех целых на "с .0 на конце".
Эта строка гадит Вам конкртено. Результат деления двух целых - всегда целое с отбрасыванием остатка, каким бы он ни был. Например 2000 / 1999 - результат - ровно 1
Проверяйте также всё остальное. Целочисленного деления (когда оба операнда - целые) быть не должно.
Например 2000 / 1999 - результат - ровно 1
Самый неудачный пример из возможных =) потому что погрешность всего то 0.0005 =) ибо 2000.00 / 1999.00 = 1.0005...
2000 / 1001 = 1 при том что 2000.00 / 1001.00 = 1.998....
Таки да. Чёт переклинило. Собирался на самом деле оба привести, чтобы разница видна была :)))
А как-то можно вместо двух цифр после точки, сделать 4? Что double, что float - всегда 2
А как-то можно вместо двух цифр после точки, сделать 4? Что double, что float - всегда 2
Их там не 2, просто Вы печатаете 2. Печатайте больше, сколько Вам нужно. Только, больше 6 знаков после запятой особого смысла не имеет - это приблизительно предел точности этого типа.