INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Thema geschlossen 

Fehler mit Vergleichsoperatoren



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

30.06.2010, 22:31 (Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2010 07:55 von jg.)
Beitrag #1

max1185 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Jun 2010

9
2010
DE

2835
Deutschland
Fehler mit Vergleichsoperatoren
Ich arbeit seit einer Zeit an einem Programm und hab im Laufe der Programmierung Unregelmäßigkeiten mit Vergleichsoperatoren entdeckt die absolut nicht logisch sind!!!

Um das zu verdeutlichen habe ich ein kleines Beispiel-VI "Para2.vi" erstellt und dazu ein kurzes Video http://screenr.com/Svm aufgenommen.
Bitte schaut euch das an oder testet das VI, oder programmiert es halt nach ...
Ich weiß jetzt leider noch nicht ob nur mein System davon betroffen ist oder ob dieser Bug allgemein ist.

Das Beispiel-VI soll die While-Schleife, bei einem Wert der größer ist als die Eingabe (x), stoppen. Die Schrittweite kann dazu eingestellt werden, denn mit jedem Schleifendurchlauf wird zum Startwert Null die Schrittweite dazu addiert und danach an einen Schieberegister übergeben. Und wie gesagt, davor erfolgt die Abfrage mit einem Vergleichsoperator! Ich hab hier als Beispiel den "größer"-Vergleichsoperator gewählt. ... Wenn also der neu berechnete Wert größer als x ist, dann soll die Schleife gestoppt werden, und genau hier kommen die Bugs!!! Denn bei bestimmten Werten für x und für die Schrittweite kommt es vor, dass bei einem "gleichen" Wert die Abfrage als "true" ausgewertet wird. Statt ">" gilt also bei bestimmten Werten ">=". usw....

Aber dieser Bug ist auch bei anderen Vergleichsoperationen da, guckt euch das Video einfach mal an!

Ich hab vorhin sogar einmal LabVIEW 2009 mit der eingebauten Funktion (beim Deinstallieren/Installieren) "reparieren" lassen und danach noch den Patch f3 installiert, aber gebracht hat das nichts :-(

Lv09_img2


Angehängte Datei(en)
Sonstige .vi  Para2.vi (Größe: 8,01 KB / Downloads: 177)
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 06:31 (Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2010 06:33 von Achim.)
Beitrag #2

Achim Offline
*****
*****


Beiträge: 4.223
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Fehler mit Vergleichsoperatoren
Lass dir mal den Wert "gestoppt bei: Wert > x" mit 25 Nachkommastellen anzeigen...dann siehst du schon, was los ist!

Berechnungen mit "Kommazahlen" sind in einem Computer nie 100% korrekt, da ergeben sich immer Rundungsfehler...das ist kein Bug, sondern systembedingt...weil dein Rechner nur mit Kombinationen von Einsen und Nullen arbeitet!

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 07:55
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Fehler mit Vergleichsoperatoren
Offtopic2
:verschoben12:aus Bugliste, da KEIN Bug.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 08:25 (Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2010 08:29 von RoLe.)
Beitrag #4

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Fehler mit Vergleichsoperatoren
Ich denke das Problem ist, das du den Addierten Wert ausgibst, der ist immer letzter Wert+Schrittweite.
Du solltest den Wert für gestoppt, vor der Addition aus der Schleife führen.

Edit: und ein Video zum Fehler zeigen, ist ja was ganz neues-> Luxus pur Big Grin

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 08:57
Beitrag #5

max1185 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Jun 2010

9
2010
DE

2835
Deutschland
Fehler mit Vergleichsoperatoren
' schrieb:Lass dir mal den Wert "gestoppt bei: Wert > x" mit 25 Nachkommastellen anzeigen...dann siehst du schon, was los ist!

Berechnungen mit "Kommazahlen" sind in einem Computer nie 100% korrekt, da ergeben sich immer Rundungsfehler...das ist kein Bug, sondern systembedingt...weil dein Rechner nur mit Kombinationen von Einsen und Nullen arbeitet!

Hmmmm ... das ist sehr komisch ...
Immerhin gibt das VI (in meinem kleinen Testbereich mit max 2-4 Nachkommastellen) die Werte im Array und im Anzeigelement richtig gerundet aus. Aber der berechneten Wert ist dann also (im Nanobereich) schon größer Wink
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 09:16
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.696
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Fehler mit Vergleichsoperatoren
' schrieb:Immerhin gibt das VI (in meinem kleinen Testbereich mit max 2-4 Nachkommastellen) die Werte im Array und im Anzeigelement richtig gerundet aus. Aber der berechneten Wert ist dann also (im Nanobereich) schon größer Wink
DBL-Werte, im allgemeinen Werte von Gleitkommazahlen, die man am Frontpanel sieht, sind für mathematische wie für Vergleichsoperationen immer irrelevant - sag ich jetzt so. Besonders dann, wenn die Anzeige auf 5 Stellen beschränkt ist. Gerechnet wird immer mit 19 Stellen (respektive so vielen wie der Typ (sgl, dbl, ext etc.) angibt. Man muss zwischen der Anzeige, die man sieht, und dem im Speicher hinterlegten Wert, mit dem gerechnet wird, unterscheiden.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 09:27 (Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2010 19:52 von jg.)
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Fehler mit Vergleichsoperatoren
' schrieb:Hmmmm ... das ist sehr komisch ...
Überhaupt nicht komisch!

Lektüre:
http://de.wikipedia.org/wiki/Gleitkommazahl
http://de.wikipedia.org/wiki/IEEE_754

Wenn man weiß, dass eine Gleitkommazahl intern in einem Computer immer irgendwas der Art a*2^(b) ist, dann wird es vielleicht klarer. Daraus folgt z.B. dass 0,1 nicht exakt als Gleitkommazahl dargestellt werden kann, aber z.B. 0,5 oder 0,25 schon.

Zusätzlich kommen dann noch Rundungsfehler beim Addieren hinzu.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 09:41
Beitrag #8

max1185 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Jun 2010

9
2010
DE

2835
Deutschland
Fehler mit Vergleichsoperatoren
Mir ist gerade ne primitive, aber doch effektive Lösung als ich dachte eingefallen!

Da mein Wertebereich zurzeit max. 2 Nachkommastellen verlang, lass ich in der Schleife zuerst eine Multiplikation mit 100 durchführen, dann konvertiere ich den aktuellen Wert in einen LongInteger und führe anschließend eine Division mit 100 durch ... und tada !!! Das VI macht das, was es machen soll Rolleyes

   
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 09:41 (Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2010 09:45 von RoLe.)
Beitrag #9

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Fehler mit Vergleichsoperatoren
gelöschtBig Grin

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
to top
01.07.2010, 10:01
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.696
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Fehler mit Vergleichsoperatoren
' schrieb:Da mein Wertebereich zurzeit max. 2 Nachkommastellen verlang, lass ich in der Schleife zuerst eine Multiplikation mit 100 durchführen, dann konvertiere ich den aktuellen Wert in einen LongInteger und führe anschließend eine Division mit 100 durch ... und tada !!! Das VI macht das, was es machen soll
Wie wär's denn, statt dbl i32 zu verwenden. Ganzzahlen haben von Natur aus keine Rundungsfehler.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
Thema geschlossen 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  "Seltsamer Fehler", LabView-Anwendung erzeugt einen Fehler 2200 ASM 5 7.852 23.01.2011 17:40
Letzter Beitrag: Y-P

Gehe zu: