- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 25

Thema: Ergebnis einer ungültiger Rechnung erkennen?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    NAN (Not a Number) und INFINITY (unendlich) sind schon die Auswertung auf Fehler. eigentlich würde bei einem Fehler 0.00 angezeigt werden. Da weis man aber nicht ob das ein Fehler ist oder ob da ein gültiges Ergebnis 0,00 steht.

    Am besten also die selbe Auswertung machen die zur Anzeige von NAN führt.

    http://forum.arduino.cc/index.php?topic=46912.0

  2. #2
    HaWe
    Gast
    die Fehler muss man normalerweise vorher abfangen, indem man die Werte außerhalb der Definitionsbereiche der Funktion vorher ausschließt.

    z.B. bei
    Code:
    float x, y;
    y=1/x;
    Serial.print(y);

    muss es mathematisch und programmier-logisch richtig heißen:

    Code:
    float x, y;
    if(x!=0) {
       y=1/x;
       Serial.print(y);
    }
    else {
       Serial.print("ERROR! x=0 => NAN! Ungültiger Wertebereich!");
    }
    Genauso musst du deine x-Werte beim acos vorher prüfen und eingrenzen.

    Andere Programmiersprachen benutzen dafür eine Konstruktion wie
    try / catch / throw exception
    etc., die genau solche Fehler durch interne Routinen abfangen.

    In C geht das nicht, in C++ aber doch, ist aber nicht meine Baustelle.

    try catch throw exception C++:
    http://www.cplusplus.com/doc/tutorial/exceptions/
    http://www.tutorialspoint.com/cplusp...s_handling.htm

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Im Arduino-Kontext sind die C++ Exceptions ausgeschaltet, u.a. weil die Implementierung von Exceptions größere Programme produziert.

  4. #4
    HaWe
    Gast
    nur aus Interesse, C++ ist ja eh nicht mein Ding...
    Im Arduino-Kontext sind die C++ Exceptions ausgeschaltet, u.a. weil die Implementierung von Exceptions größere Programme produziert.
    tatsächlich? immer? oder nur bei AVRs?

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Zitat Zitat von HaWe Beitrag anzeigen
    tatsächlich? immer? oder nur bei AVRs?
    So weit ich weiss gilt das für alle Arduinos, definitiv auch für z.B. den DUE.

  6. #6
    HaWe
    Gast
    ok, das ist mal wieder ne Einschränkung, die ziemlich dämlich ist, wenngleich sie auch mich nicht persönlich betrifft....

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Zitat Zitat von HaWe Beitrag anzeigen
    ok, das ist mal wieder ne Einschränkung, die ziemlich dämlich ist, wenngleich sie auch mich nicht persönlich betrifft....
    Exceptions sind defaultmäßig aus, weil sie normalerweise nicht gebraucht werden. Ansonsten rede mit dem Compiler, er lässt sich (mittels Flag) überreden.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von i_make_it Beitrag anzeigen
    NAN (Not a Number) und INFINITY (unendlich) sind schon die Auswertung auf Fehler. eigentlich würde bei einem Fehler 0.00 angezeigt werden. Da weis man aber nicht ob das ein Fehler ist oder ob da ein gültiges Ergebnis 0,00 steht.

    Am besten also die selbe Auswertung machen die zur Anzeige von NAN führt.

    http://forum.arduino.cc/index.php?topic=46912.0
    Danke für eure reichlichen Tipps!

    Frage an i_make_it:

    Die Info aus deinem Link habe ich so versucht umzusetzen:

    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);           
    
    }
    Es kommt zwar der Text "nan" auf der Konsole, aber nicht "Mist".
    Wenn ich es genau so wie im Link mache, klappt schon das Kompilieren nicht.

    Gruß
    fredyxx

Ähnliche Themen

  1. Methoden zum Erkennen einer Fehlerbedingung in Microcontroller-Systemen
    Von Dirk im Forum Software, Algorithmen und KI
    Antworten: 23
    Letzter Beitrag: 24.03.2016, 20:01
  2. Sensor oder Schalter zum erkennen einer PokerKarte
    Von Andreas1984 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 1
    Letzter Beitrag: 25.12.2013, 01:17
  3. Division mit Nachkommastellen als Ergebnis???
    Von erik_wolfram im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 22.08.2011, 16:13
  4. Beenden einer ISR erkennen
    Von hacker im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 12.08.2009, 17:34
  5. Wie Abzweigung einer Linie erkennen?
    Von p_mork im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 16.08.2007, 10:39

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress