29.01.2008, 08:50
(Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2008 08:51 von weesnich.)
Beitrag #1
|
weesnich
LVF-Grünschnabel
Beiträge: 37
Registriert seit: Dec 2007
8.2
2007
kA
7XXXX
Deutschland
|
Kleiner/gleich vergleich versagt
Guten morgen
In einem Teil meines Programms, wo 2 Werte verglichen werden, soll auch ein True ausgegeben werden, wenn die 2 Werte gleich sind. Normalerweise funktioniert der Vergleich immer prima, aber bei meinem Aufbau versagt er. Warum? Was mache ich da falsch? Sobald ich eine Zahl um 0,1 jeden Schleifendurchgang aufsteigen lasse und die andere Zahl 2 beträgt, erhalte ich ein False!
Hier mal ein Nachbau im Anhang. Handelt es sich um ein Formatierungsproblem?
kleiner_gleich.vi (Größe: 10,2 KB / Downloads: 337)
|
|
|
29.01.2008, 10:18
Beitrag #2
|
|
|
29.01.2008, 10:23
(Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2008 10:59 von Lucki.)
Beitrag #3
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Kleiner/gleich vergleich versagt
Der Vergleich von Realzahlen auf Gleichheit funktioniert nur selten. Sie sind (- bei unterschiedlichen Rechenoperatinen -) nie gleich, sondern immer nur gleich innerhalb der Maschinengenauigkeit epsilon. Diese Konstante (siehe in der Funktionspalette unter numerisch) hat für double den Wert 2.22E-16. Wahrscheinlich kann bei mehreren Rechenoperationen hintereinander die resultierende Toleranz auch größer sein als Epsilon. Man sollte also, wenn es darauf ankommt, die Gleichheitprüfung durch die Prüfung, ob sie innerhalb der Toleranz Epsilon gleich sein, ersetzen.
Konkret: Die Zahl, die Du mit 2 vergleichst, hat in Wirklichkeit diesen Wert: (uups, das ist nicht die 2, aber Du verstehst schon)
Zitat:In einem Teil meines Programms, wo 2 Werte verglichen werden,
Mein Deutschlehrer hätte verzweifelt gerufen "Wo nur bei Ortsangaben, wie oft muß ich das noch sagen!"
edit: @Achim: ich würde das so erklären, daß Größe (und Vorzeichen) der Ungenauikeit abhängig von Startwert ist, so daß es bei einem Wert funktioniert, bei einem anderen nicht.
|
|
|
29.01.2008, 10:27
(Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2008 10:28 von VDB.)
Beitrag #4
|
VDB
LVF-Stammgast
Beiträge: 426
Registriert seit: Oct 2005
2010-2011
1997
kA
52134
Deutschland
|
Kleiner/gleich vergleich versagt
Das Vergleichen von Doubles wurde hier im Forum schon x-mal durchgekaut..., mann kann Doubles nicht direkt vergleichen.
Siehe hier: http://wiki.lavag.org/Numeric
VDB
edit: Lucki war schneller...
|
|
|
29.01.2008, 10:43
Beitrag #5
|
weesnich
LVF-Grünschnabel
Beiträge: 37
Registriert seit: Dec 2007
8.2
2007
kA
7XXXX
Deutschland
|
Kleiner/gleich vergleich versagt
Oh, okay danke!
Trotzdem eine etwas verrückte Sache, dass man mit Hilfe der Genauigkeit/Formatierung diese Toleranz nicht wegfallen lassen kann...
|
|
|
29.01.2008, 10:46
Beitrag #6
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
Kleiner/gleich vergleich versagt
Benutze statt dessen das VI "In Range and Coerce", da kannst du deine Toleranz wegfallen lassen.
|
|
|
29.01.2008, 10:53
Beitrag #7
|
|
|
29.01.2008, 10:59
Beitrag #8
|
weesnich
LVF-Grünschnabel
Beiträge: 37
Registriert seit: Dec 2007
8.2
2007
kA
7XXXX
Deutschland
|
Kleiner/gleich vergleich versagt
okay versuche es mal damit, sonst Vergleiche ich einfach ob es kleiner ist als der nächste Wert udn lasse eifnach das gleich weg, ich kenne ja die Schrittweite, da ich sie vorgebe.
Ist es möglich den Wert, den ich da Stück für Stück aufsummiere, näher an meinen eigentlichen Wert ranzubringen, oder lässt sich diese Toleranz nicht so leicht entfernen? ich gebe diese Wert nämlich an ein SourceMeter weiter, das die entsprechende Spannung/Strom erstellen soll dun will nicht das diese Toleranz bei größeren Messungen Einfluss nimmt.
' schrieb:Benutze statt dessen das VI "In Range and Coerce", da kannst du deine Toleranz wegfallen lassen.
|
|
|
29.01.2008, 11:05
(Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2008 11:10 von Lucki.)
Beitrag #9
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Kleiner/gleich vergleich versagt
' schrieb:Trotzdem eine etwas verrückte Sache, dass man mit Hilfe der Genauigkeit/Formatierung diese Toleranz nicht wegfallen lassen kann...
Die Formatierung betrifft nur die Darstellung in der Anzeige. Um die Zahl selbst auf z.B. echt 4 Kommastellen zu runden, mußt Du sie mit 1e4 multiplizieren, auf Ganzzahl runden und dann wieder durch 1e4 dividieren. (oder alternativ: zwischenzeitlich in Text konvertieren).
... und diesmal war VDB schneller, ein Telefonanruf während des Schreibens (in offensichtlich bösartiger Absicht) war schuld!
|
|
|
29.01.2008, 11:19
|
weesnich
LVF-Grünschnabel
Beiträge: 37
Registriert seit: Dec 2007
8.2
2007
kA
7XXXX
Deutschland
|
Kleiner/gleich vergleich versagt
Das mit dem String funktioniert einwandfrei, erst in String und dann wieder zurück nach DBL, dankeschön!
Für mich ist der Fall so erledigt, ich habe eine Lösung und bin ein ganzes Stück schlauer! Danke! ich werd wohl in Zukunft lieber alles nochmal selbst nachrechnen was eine Maschine mir ausspuckt
' schrieb:Die Formatierung betrifft nur die Darstellung in der Anzeige. Um die Zahl selbst auf z.B. echt 4 Kommastellen zu runden, mußt Du sie mit 1e4 multiplizieren, auf Ganzzahl runden und dann wieder durch 1e4 dividieren. (oder alternativ: zwischenzeitlich in Text konvertieren).
... und diesmal war VDB schneller, ein Telefonanruf während des Schreibens (in offensichtlich bösartiger Absicht) war schuld!
|
|
|
| |