- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Ergebnis einer ungültiger Rechnung erkennen?

  1. #11
    HaWe
    Gast
    Anzeige

    E-Bike
    Ansonsten rede mit dem Compiler, er lässt sich (mittels Flag) überreden.
    DAS wäre dann vlt der richtige Tipp für fredyxx

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    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

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Zitat Zitat von Sisor Beitrag anzeigen
    Ich würde floats ggf. mit isnan() oder isinf() testen.
    Hier ein Auszug aus Print.cpp des Arduino-Kerns:
    Eigentlich sind die Konstanten FLT_MAX und FLT_MIN, bzw. DBL_MAX und DBL_MIN und auch NAN in math.h definiert.
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  4. #14
    HaWe
    Gast
    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...)

  5. #15
    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

  6. #16
    HaWe
    Gast
    @fredyxx:
    bevor du hier den Überblick verlierst...

    ich würde es so machen wie hier beschrieben:
    https://www.roboternetz.de/community...l=1#post629121

  7. #17
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von HaWe Beitrag anzeigen
    @fredyxx:
    bevor du hier den Überblick verlierst...

    ich würde es so machen wie hier beschrieben:
    https://www.roboternetz.de/community...l=1#post629121
    Danke,

    das habe ich nicht übersehen, aber ich würde auch gerne die andere Variante kennen lernen.

    Gruß

    fredyxx

  8. #18
    HaWe
    Gast
    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?

  9. #19
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von HaWe Beitrag anzeigen
    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?

    Es ist eigentlich kein Problem. Aber wenn ich was dazu lernen kann, ist das ja auch gut.

    Gruß
    fredyxx

  10. #20
    HaWe
    Gast
    alles klar, so gehts mir zur Zeit mit anderen Dingen auch

    - - - Aktualisiert - - -

    ps:

    zu deinem Code
    Code:
    if (x == NAN) 
    {
       Serial.println("Mist");
    }
    Du kannst nicht x mit NAN vergleichen, NAN ist kein gültiger numerischer Wert.
    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
    Ich würde floats ggf. mit isnan() oder isinf() testen.
    d.h. z.B. versuchen per
    Code:
    if (isnan(x))
    {
       Serial.println("Mist");
    }
    , oder versuchen, per Flag die C++ Exceptions einzuschalten,
    oder die gültigen/ungültigen Bereiche vorher auszuschließen, wie ich es getan habe..
    Geändert von HaWe (09.07.2016 um 20:46 Uhr)

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ä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, 21: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, 02:17
  3. Division mit Nachkommastellen als Ergebnis???
    Von erik_wolfram im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 22.08.2011, 17:13
  4. Beenden einer ISR erkennen
    Von hacker im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 12.08.2009, 18:34
  5. Wie Abzweigung einer Linie erkennen?
    Von p_mork im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 16.08.2007, 11:39

Berechtigungen

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

LiFePO4 Speicher Test