Неверные результаты при делении
- Войдите на сайт для отправки комментариев
Вс, 28/09/2014 - 10:16
Здравствуйте. Подскажите, пожалуйста, где я прокололся?
Использую Arduino Uno R3, LCD HD44780
Arduino неправильно все считает!
Есть обычный пример:
double Hotangle=45.0,ColdAngle=45.0; if(Ratio<1.00) { ColdAngle=HotAngle * Ratio; lcd.clear(); lcd.print(HotAngle); lcd.setCursor(7, 0); lcd.print(Ratio); delay(2000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ratio="); lcd.setCursor(6, 0); lcd.setCursor(11, 0); lcd.print(HotAngle); lcd.setCursor(0, 1); lcd.print(ColdAngle); Serial.println(ColdAngle); }
Так вот, Ratio выше вычисляется и равняется 0.67 (и на дисплей и в монитор выводится как результат 0.67, проверял на калькуляторе) Должно быть 45*0,67 = 30.15, у меня же все время выходит результат 30.00. Если я напишу: ColdAngle=HotAngle * 0.67 то результат получается как раз 30.15, но при выводе значения на дисплей Ratio и так равняется 0.67. К тому же, если я запишу вот так:
if(Ratio<1.00) { Ratio=0.67; ColdAngle=HotAngle * Ratio; lcd.print(Ratio); }
то результат будет равен тоже 30.15. Но опять же Ratio и так уже равно 0.67.
Подскажите, пожалуйста, в чем может быть проблема.
Прошу прощения, всю ночь не спал:
"Неверные результаты при умножении"
Фокусы компилятора, оно считает, что Ratio имеет тип int. Объявите в начале Ratio явным образом, или напишите в ифе Ratio <1.01
double Ratio=0.0;
Вычисление Ratio:
Ratio=(60-40)/(40-10);
Ratio=0.67;
ColdAngle=HotAngle * Ratio;
ColdAngle=45*0.67=30.15
Но у меня по прежнему результат равен 30.00, даже после изменения условия на 1.01
Весь код покажите.
Ввожу постоянно значение 40.
Ratio=(60-40)/(40-10)=20/30=0.67
Во всех выводах значения переменной (lcd.print, Serial.println) Ratio = 0.67 Тоесть считает правильно, но при операции: ColdAngle=HotAngle * Ratio; почему то расчет идет не верный, хотя при выводе значения каждой переменной, результат верный.
Может стоит попробовать тип данных float ? Может его компилятор нормально обрабатывает.
вычисления принудительно проводя с типом float
Может стоит попробовать тип данных float ? Может его компилятор нормально обрабатывает.
вычисления принудительно проводя с типом float
Объявил все как float, результат тот же
Как такое вообще может быть?) Уже голова лопается, весь день на это потратил и не могу понять в чем проблема. Если ввожу вместо сорока - 44, то уравнение приобретает вид: Ratio=(60-44)/(44-10)=16/34=0.47
0.47 считает правильно, но опять при вычислении ColdAngle=HotAngle * Ratio; (ColdAngle=45*0.47) ошибка в результате: ответ по факту 21.15, ответ в переменной: 21.18
надо будет написать прогу калькулятор для проверки. Еще не проверял как микроконтроллер работает с дробными значениями.
Создал новый скетч для проверки и записал все следующим образом:
Тут все тоже самое. Ratio=30.00
Что делать?
Если изменить вывод на
то что покажет?
Если изменить вывод на
то что покажет?
http://www.cyberforum.ru/cpp-beginners/thread63109.html ?
Так чем все закончилось ?
Хотите чтобы умножалось округленное число, так округлите его сначала как положено до нужного числа знаков.
Убийца - мосфет, ну или ДОСААФ. Мы все прекрасно знаем что даже взрослые процессоры с длинными цифрами после запятой имеет определенные трудности. Кто не верит - в гугль.