Проблема сравнения float
- Войдите на сайт для отправки комментариев
Ср, 08/01/2014 - 15:23
void setup() { Serial.begin(9600); float azimuth = 0; float course = 180; float a = sin((azimuth - course)*PI/180.0); Serial.print(a); Serial.print(" - "); Serial.print(azimuth); Serial.print("/"); Serial.print(course); Serial.print(" - "); if (azimuth == course){ Serial.println("m"); } else if (a <= 0.0){ Serial.println("r"); }else{ Serial.println("l"); } } void loop() {}
Должно выдавать "r" а выдает "l". В чем дело?
И не должно, и не обязано...
непонимаю ,что особого изменилось
Ну так а вы код то залили? посмотрели что в монитор выводит??? Если нет, то можете дальше не понимать...
Ну так а вы код то залили? посмотрели что в монитор выводит??? Если нет, то можете дальше не понимать...
залили посмотрели, не дураки как никак. В монитор выводит все тоже
только нулей больше
Ну раз не дураки залейте еще раз, и заливайте до тех пор пока не получите это:
А после подумайте почему 0.0000000874 не равно и не меньше нуля.
Я думаю вам нужно диапазон значений указывать при сравнении - потому что float может никогда не быть равно другому float - потому что у него есть небольшой допуск(разброс) у аппаратной части есть шаг дискретизации.
для float значений должно записываться как
где 0.000001 -- желаемая точность сравнения, допустимая погрешность.