Im Arduino-Kontext sind die C++ Exceptions ausgeschaltet, u.a. weil die Implementierung von Exceptions größere Programme produziert.
Im Arduino-Kontext sind die C++ Exceptions ausgeschaltet, u.a. weil die Implementierung von Exceptions größere Programme produziert.
nur aus Interesse, C++ ist ja eh nicht mein Ding...
tatsächlich? immer? oder nur bei AVRs?Im Arduino-Kontext sind die C++ Exceptions ausgeschaltet, u.a. weil die Implementierung von Exceptions größere Programme produziert.
ok, das ist mal wieder ne Einschränkung, die ziemlich dämlich ist, wenngleich sie auch mich nicht persönlich betrifft....![]()
DAS wäre dann vlt der richtige Tipp für fredyxxAnsonsten 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: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
@fredyxx:
bevor du hier den Überblick verlierst...
ich würde es so machen wie hier beschrieben:
https://www.roboternetz.de/community...l=1#post629121
du hast Recht, es ist wirklich ein sehr ausgefallenes Spezial-Rand-Thema.
Normalerweise unmschifft man das Problem ungültiger Funktionswertbereiche eben anders, wie bereits beschrieben.
Übrigens ist wichtig für dich zu wissen:
C-Programme können durchaus absolut unbemerkt vom Beobachter Myriaden von nans bei Berechnungen produzieren, ohne dass das Programm irgendwie in welcher Weise auch immer auffällig wird (sich aufhängt, abstürzt, was auch immer)
- nur wenn du zufällig einen Wert genauer betrachten willst, und eine Ausgabe auf den Bildschirm machst, fällt dir plötzlich ein "nan" auf.
Selber schon erlebt, bei einem Benchmark-Test, der für manche Benchmarks auf manchen Systemen unglaublich (unglaubhaft) schnell lief.
Der Grund war, dass es zu nans kam, mit denen er einfach die folgenden Operationen nicht mehr durchgeführt hat, und daher war er damit ntl sehr schnell fertig und hat dann einfach die nächsten Programmschritte etwas früher als geplant in Angriff genommen...![]()
Lesezeichen