LabVIEWForum.de
Zahlenverwirrung // 2.85 != 2.85? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Zahlenverwirrung // 2.85 != 2.85? (/Thread-Zahlenverwirrung-2-85-2-85)

Seiten: 1 2


Zahlenverwirrung // 2.85 != 2.85? - Kasi - 17.04.2012 14:05

Hallo zusammen,

nachdem ich heute versucht habe, ein Problem bei einer Arraysuche einzugrenzen konnte ich es irgendwann auf folgendes in meinen Augen verwirrendes VI runterkochen:
[attachment=39477]
Im oberen Vergleich ist der Code, der letztlich die fehlgeschlagene Ursache verursacht, und mir sagt, dass 2.85 != 2.85 sei. Unten habe ich dann testweise den Inhalt der einen Konstante in den der anderen kopiert, was eine Gleichheit der Konstanten bewirkt.
Die Frage ist: Was unterscheidet die obigen Konstanten voneinander? Beide sind DBL, beide sind nicht durch irgendwelche Formatierungen verkürzt/verändert, ich habe keine Ahnung, wieso Labview mir meldet, dass sie ungleich sind.

Kann mir jemand den Grund nennen? Danke!


RE: Zahlenverwirrung // 2.85 != 2.85? - Achim - 17.04.2012 14:10

Gleitkomma DARF man nicht auf "gleich" vergleichen...NIE!

[attachment=39479]


RE: Zahlenverwirrung // 2.85 != 2.85? - jg - 17.04.2012 14:10

Schon mal die Anzahl der Nachkommastellen erhöht?
[attachment=39478]
Gleichheitsvergleich bei Fließkommazahlen funktioniert sehr gerne mal nicht.

Gruß, Jens

EDIT: Mist, Achim war schneller. Wink


RE: Zahlenverwirrung // 2.85 != 2.85? - Kasi - 17.04.2012 14:13

Autsch, ich hatte nach der fünften Nachkommastelle aufgehört.... das heisst dann wohl Runden? Oder gibt's elegantere Möglichkeiten, Gleichheit auf signifikante Stellen zu überprüfen?


RE: Zahlenverwirrung // 2.85 != 2.85? - Achim - 17.04.2012 14:14

"In Range"

Alternativ: den sichtbaren "Text" des NumericControl extrahieren und dann wieder in eine Zahl wandeln...da wird dann einfach abgeschnitten.


RE: Zahlenverwirrung // 2.85 != 2.85? - Kasi - 17.04.2012 14:18

mhmhm....nicht das, was mir unter elegant vorschwebt, aber ne Lösung. Danke Euch beiden für die schnelle Hilfe. Ich erinnere mich an Informatikstunden vor 15 Jahren, wo diese Problematik mal in einem Turbo Pascal Beispiel beschrieben wurde, aber dieses Wissen ging über die Jahre verloren Wink

----
Die bearbeitete Lösung gefällt mir besser, allerdings muss ich im Originalprogramm nochmal schauen, woher genau die Zahlen kamen und ob das so umsetzbar ist. danke nochmal!


RE: Zahlenverwirrung // 2.85 != 2.85? - Achim - 17.04.2012 14:27

Noch ne Alternative...kam grad von meiner Kollegin:

Beide Zahlen voneinander subtrahieren und auf "=0" prüfen...da gibts ja ne Primitive dafür!

A.


RE: Zahlenverwirrung // 2.85 != 2.85? - Kasi - 17.04.2012 14:30

Das läuft dann aber wieder auf die gleiche Problematik, da die in der 15ten Nachkommastelle ungleichen Zahlen auch nicht Null in der Differenz ergeben.


RE: Zahlenverwirrung // 2.85 != 2.85? - GerdW - 17.04.2012 14:38

Hallo,

die Lösung wurde schon genannt: InRangeAndCoerce!

bool = InRangeAndCoerce(0;abs(x-y);epsilon)


RE: Zahlenverwirrung // 2.85 != 2.85? - Kasi - 17.04.2012 14:44

Okay, damit ist mein Problem zur Gänze gelöst! Ich nehme aus der heutigen Stunde mit, nie wieder DBL vergleichen.