Hallo zusammen, ich hätte eine Frage, ich muss zu einer Funktion daten übergeben, die guten sind double werte, aber dazwischen sind error werte die so bezeichnet sind zb: #E, sie sind allgemein keine double Werte. Ich suche irgendeine Function in c/c++ die mir unterscheidet zwischen double und Errorwerte. Vielen Dank.
The other side of Horst wrote:
> IsNaN
ich habe ausprobiert, aber der Compiler (visual studio 2005) erkennt die
funktion nicht obwohl ich "cmath.h" eingefügt habe.
weisst warum.
Danke.
_isnan, siehe: http://msdn.microsoft.com/en-us/library/aa298428(VS.60).aspx http://bytes.com/forum/thread217918.html
tata wrote: > _isnan, siehe: > http://msdn.microsoft.com/en-us/library/aa298428(VS.60).aspx > http://bytes.com/forum/thread217918.html danke ich habe es ausprobiert, für die Funktion _isnan ist alles was übergebe ist double,auch wenn ich (+#.-.)eingebe, mein problem ist, ich muss unterscheiden zwischen normale double werte und solche parameter #E00 zb die keine werte sind. Hat jemand eine Idee. Danke.
Du solltest vielleicht etwas klarer spezifizieren, was Du vorhast und wie Du das umsetzt. Wie "übergibst" Du etwas, was Du eingibst, als double? Liest Du Strings ein und konvertierst die mit atof oder sscanf oder was machst Du?
Wendest du ihn richtig an? Könntest ja auch mit
1 | if (fscanf(foo,"#%2f",&bar)) { |
2 | //cooler Code
|
3 | }
|
4 | else if (fscanf(foo,"%2f",&bar)) { |
5 | //anderer cooler Code
|
6 | }
|
oder so arbeiten.
Hallo Die Werte bekomme ich von einem Abstandssensor und sind double werte, wenn der Sensor nicht auf den Gegenstand schiesst dann bekommt man solche werte die keine double sind (zb #E), die ich ignorieren muss. meine Funktion schaut so aus: bool Vergleich (double wert) { if (wert)// hier möchte ich abfragen ob der wert double oder nicht return 1; else return 0; } ich hoffe dass ich euch meine Frage gut erklärt habe. kennt ihr irgend eine idee. Danke.
Das funktioniert so wirklich nicht, denn das '#E00' wird dann vermutlich als Zahl interpretiert. Kannst ja '0' in ein int/float hämmern, da kommt immer 48 (dec) raus, denn 48 ist die Verschiebung der Zahlen im ASCII-Zeichensatz. Zu deinem Problem: Welchen Wertebereich deckts ab? 'E00' wird als 1160785929 (dec) ausgewertet, wenn du Lust hast kannst du das gerne nachrechnen. ;-) Wenn die Fehlerausgaben von '#E00' bis '#E99' gehen und dein Wertebereich unter 1160785929 ist, müsste folgendes funktionieren.
1 | if (wert < '#E00') |
cu
> Ich suche irgendeine Function in c/c++ die mir unterscheidet zwischen > double und Errorwerte. Was denn nun, C oder C++?
> Die Werte bekomme ich von einem Abstandssensor und sind > double werte, wenn der Sensor nicht auf den Gegenstand > schiesst dann bekommt man solche werte die keine double > sind (zb #E), Wie sieht das in der Realität aus? Ist das eine Klartextdarstellung oder was?
Ali Mensch überleg doch mal was du schreibst! Ob das für andere nachvollziehbar ist. > wenn der Sensor nicht auf den Gegenstand > schiesst dann bekommt man solche werte die keine double > sind void f(double wert) { // alles was im wert drin steht ist ein double // entweder als zahl oder als kennung (nan) } geh mal zum Typen der den Sensor programmiert hat und frag ihn .. 1) welchen zahlenbereich soll 'wert' abdecken 2) wie signalisiert man sonderzustände! so ein sonderzustand ist zb "nix erkannt" dafür existieren nämlich mehrere lösungen wie man es signalisieren kann. entweder man nimmt einen unbenutzen wert ausserhalb des zahlenbereichs, oder man führt andere variable ein, die den zustand kodiert. üblicherweise kodiert man das in bool oder enum. grüsse, daniel
Hallo anbei findet ihr ein excel file,wo ein Beispiel von den echten messungen sind. wie ihr merkt ich messe den Abstand von einem rotorblatt und wenn ich zwischen 2 Blätter dann kommen solche werte mit E2. deswegen muss unterscheiden zwischen normale werte und diese Zahlen E2 weil ich nur die guten brauche und die schlechten ignoriere ich sie. An Chris: es wird eigentlich in C++ aber es macht keinen großen Unterschied ob es in C oder C++. sorry dass ich meine Frage nicht gut beschrieben habe. Danke für eure Hilfe.
Und wo ist jetzt das Problem? Die Nicht-Zahl-Werte sind doch leicht rauszufiltern?
Peter Stegemann wrote: > Und wo ist jetzt das Problem? Die Nicht-Zahl-Werte sind doch leicht > rauszufiltern? wie meinst du denn?kannst du mir bitte genauer erklären.
Zeig doch mal den Code her, den du bisher hast. Aber vieleicht waere es besser, du kaufst dir ein C-Buch und faengst von der ersten Seite an...
das problem ist dass diese E2 wird vom compiler als double wert konvertiert 17714, für E2 habe ich schon: #define Error_wert 'E2' bool ErrorVergleich( double wert ) { if ( ( wert >= Error_wert ) || ( wert <= 0.0 ) ) return true; else return false; } so geht auch, aber ich wollte fragen ob es noch eine elegante Lösung gibt, die nicht E2 rausfiltert,sondern alle Werte in dieser Art. und mit solche Kommentare helfen die Leute nicht!!! "Aber vieleicht waere es besser, du kaufst dir ein C-Buch und faengst von der ersten Seite an..." Danke.
Anscheinend bekommst Du Deine Werte nicht als double, sondern als String. Dann ist es absolut pupseinfach, herauszufinden, ob die Werte gültig sind. Zunächst entfernst Du whitespace (also Leerzeichen, Tabulatoren etc.), dann untersuchst Du das erste darauffolgende Zeichen. Gültig ist der Wert, wenn das Zeichen eine Ziffer oder ein Minuszeichen ist, in allen anderen Fällen ist der Wert ungültig.
schon merkwürdig wie wir alle rumrätseln Ali ist dir der Unterschied zwischen 1e1 und "1e1" klar? Mach dir klar warum 1 nicht dasselbe ist wie "1" und wiederrum nichtdasselbe ist wie '1'
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.