@fredyxx:
bevor du hier den Überblick verlierst...
ich würde es so machen wie hier beschrieben:
https://www.roboternetz.de/community...l=1#post629121
@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 perIch 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..
Geändert von HaWe (09.07.2016 um 19:46 Uhr)
Hier wird das aber so gemacht! Daher mein VersuchDu kannst nicht x mit NAN vergleichen,
http://http://forum.arduino.cc/index.php?topic=46912.0
ich persönlich bin nicht überzeugt, dass der Code valide ist, immerhin ist allerdings in Arduinisch einiges möglich, was sonst in C so nicht möglich ist.
Aber es ist ja auch C++ im Hintergrund: Wer weiß, welche Klassen da verdeckt eingeschlossen wurden, welche Exceptions da verdeckt ausgelöst werden, und was da privat oder public ist.
Die Tatsache, dass der Code bei dir aber nicht kompiliert wird, stützt zumindest meine Zweifel.
- - - Aktualisiert - - -
hier findet man weiterführende Erklärungen:
http://stackoverflow.com/questions/1...n-and-inf-in-c
The existence of INFINITY is guaranteed by C99 (or the latest draft at least), and "expands to a constant expression of type float representing positive or unsigned infinity, if available; else to a positive constant of type float that overflows at translation time."
NAN may or may not be defined, and "is defined if and only if the implementation supports quiet NaNs for the float type. It expands to a constant expression of type float representing a quiet NaN."
Note that if you're comparing floating point values, and do:
a = NAN;
even then,
a == NAN;
is false. One way to check for NaN would be:
#include <math.h>
if (isnan(a)) { ... }
You can also do: a != a to test if a is NaN.
There is also isfinite(), isinf(), isnormal(), and signbit() macros in math.h in C99.
C99 also has nan functions:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(ocnst char *tagp);
Lesezeichen