DAS wäre dann vlt der richtige Tipp für fredyxx 8)Zitat:
Ansonsten rede mit dem Compiler, er lässt sich (mittels Flag) überreden.
Druckbare Version
DAS wäre dann vlt der richtige Tipp für fredyxx 8)Zitat:
Ansonsten rede mit dem Compiler, er lässt sich (mittels Flag) überreden.
Ich würde floats ggf. mit isnan() oder isinf() testen.
Hier ein Auszug aus Print.cpp des Arduino-Kerns:Zitat:
if (isnan(number)) return print("nan");
if (isinf(number)) return print("inf");
if (number > 4294967040.0) return print ("ovf"); // constant determined empirically
if (number <-4294967040.0) return print ("ovf"); // constant determined empirically
sprichst du da als Arduino-Nutzer?
Wir reden ja hier von der Arduino-IDE, als Rat für einen Arduino-Nutzer - hast du's mal ausprobiert?
(müsste aber auch in <float.h> stehen, nicht in <math.h>, CMIIW - aber sag das mal nem Arduino-Anfänger, der sonst nie #includes benutzen muss... dann könnte es gehen mit FLT_MAX - was aber hier nicht das Problem ist...)
Danke für eure reichlichen Tipps!
Frage an i_make_it:
Die Info aus deinem Link habe ich so versucht umzusetzen:
Es kommt zwar der Text "nan" auf der Konsole, aber nicht "Mist".Code:#include <math.h>
void setup() {
Serial.begin (250000);
while (!Serial);
}
void loop() {
float x = acos(1.2);
int testFloat(float x);
if (x == NAN)
{
Serial.println("Mist");
}
Serial.println ( x);
}
Wenn ich es genau so wie im Link mache, klappt schon das Kompilieren nicht.
Gruß
fredyxx
@fredyxx:
bevor du hier den Überblick verlierst...
ich würde es so machen wie hier beschrieben:
https://www.roboternetz.de/community...l=1#post629121
dann ist es ntl ok ! :)
wie kommt es denn (nur aus Interesse), dass dein Programm einen verbotenen Wert für deinen acos generiert? Das dürfte doch eigentlich gar nicht passieren?
alles klar, so gehts mir zur Zeit mit anderen Dingen auch ;)
- - - Aktualisiert - - -
ps:
zu deinem Code
Du kannst nicht x mit NAN vergleichen, NAN ist kein gültiger numerischer Wert.Code:if (x == NAN)
{
Serial.println("Mist");
}
Dass du nan auf dem Screen hast, ist die Folge dessen, dass du an Serial.print einen Wert übergibst, der als ungültig definiert ist, und daher gibt print von sich aus nan aus.
Daher kannst du auch mit if() keine Abfrage machen wie beim Exception-Handling mit try...catch - du musst die Exceptions von dir aus selber, manuell behandeln, wie schon von Sisor angedeutet
d.h. z.B. versuchen perZitat:
Ich würde floats ggf. mit isnan() oder isinf() testen.
, oder versuchen, per Flag die C++ Exceptions einzuschalten,Code:if (isnan(x))
{
Serial.println("Mist");
}
oder die gültigen/ungültigen Bereiche vorher auszuschließen, wie ich es getan habe..