Forum: PC-Programmierung Double wert in c/c++ erkennen


von Ali K. (lernen)


Lesenswert?

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.

von The other side of Horst (Gast)


Lesenswert?

IsNaN

von Ali K. (lernen)


Lesenswert?

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.

von tata (Gast)


Lesenswert?


von Ali K. (lernen)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von tata (Gast)


Lesenswert?

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.

von Ali K. (lernen)


Lesenswert?

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.

von tata (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

> Ich suche irgendeine Function in c/c++ die mir unterscheidet zwischen
> double und Errorwerte.

Was denn nun, C oder C++?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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?

von daniel (Gast)


Lesenswert?

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

von Ali K. (lernen)


Angehängte Dateien:

Lesenswert?

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.

von P. S. (Gast)


Lesenswert?

Und wo ist jetzt das Problem? Die Nicht-Zahl-Werte sind doch leicht 
rauszufiltern?

von Ali K. (lernen)


Lesenswert?

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.

von P. S. (Gast)


Lesenswert?

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...

von Ali K. (lernen)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von daniel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.