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.


Antwort schreiben 

Flatten to xml -> Zahlen fehlerhaft



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!

17.11.2011, 15:10
Beitrag #1

Hans lv-dau Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Nov 2008

8.6, 2010
1992
EN

79650
Deutschland
Flatten to xml -> Zahlen fehlerhaft
Hallo,

bei der recht simplen Funktion flatten to xml gib es bei dbl-Werten >4224 einen "Rundungsfehler".
Gefunden bei LV-Version 8.6 und 2010 SP1, hier im Beispiel auf die Funktion reduziert, aufgefallen ist das weil natürlich der falsche Wert auch in der Datei landet.


Hat da jemand eine Erklärung?
Ist das "vermeidbar"?

Danke und Grüsse
Hans


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
17.11.2011, 15:46
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Flatten to xml -> Zahlen fehlerhaft
Stell doch mal die Zahlenanzeige im FP auf "viele" (mind. 16) Nachkommastellen um und schau dir an, was für Werte da wirklich drinstehen.

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
Diese Nachricht in einer Antwort zitieren to top
17.11.2011, 16:26
Beitrag #3

Hans lv-dau Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Nov 2008

8.6, 2010
1992
EN

79650
Deutschland
RE: Flatten to xml -> Zahlen fehlerhaft
hier mal mit 16 Nachkommastellen.


und hier:
http://zone.ni.com/reference/en-XX/help/...en_to_xml/

habe ich das gefunden:
xml string is the resulting XML string that represents the LabVIEW data type. When converting decimal values, this function uses only the period (.) as a decimal separator. The function does not use localized decimal separators.

ganz dunkel ist da noch die Erinnerung an Auflösung, wie bei Filtern und Digitalisierung und dem verlorenen LSB ...


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2011, 08:57
Beitrag #4

Hans lv-dau Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Nov 2008

8.6, 2010
1992
EN

79650
Deutschland
RE: Flatten to xml -> Zahlen fehlerhaft
ich habe jetzt anstatt dem cluster mal nur einen string bzw. dbl-Wert zum xml:


numeric-Wert 4250.123456789123

ergibt diesen xml-string:
<DBL>
<Name>Numeric</Name>
<Val>4250.12345678912333</Val>
</DBL>


string-Wert 4250.123456789123

ergibt diesen xml-string:
<String>
<Name>String</Name>
<Val>4250.123456789123</Val>
</String>

numerische Werte werden "irgendwie" konvertiert und string geht direkt in xml-string!
wer kann denn sowas erklären? Guru2


Angehängte Datei(en)
8.6 .vi  kuriosum-flatten2xml.vi (Größe: 6,57 KB / Downloads: 142)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2011, 10:31 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2011 10:39 von unicorn.)
Beitrag #5

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
RE: Flatten to xml -> Zahlen fehlerhaft
Nummerische Werte werden mit maximaler Stellenanzahl formatiert als String ausgegeben. Da sieht man dass im Computer Fließkommazahlen diskret sind.

Da eine XML-Datei auch für Menschen lesbar sein soll, wird die Fließkommazahl nicht binär ausgegeben (dann würde Dir die Diskretisierung gar nicht auffallen) sondern als String formatiert. Und das mit voller Stellenzahl, damit beim Einlesen wieder die gleiche Zahl im Speicher steht.

Beim String gibt es nichts umzuwandeln. Der kann 1:1 ausgegeben werden.
Vielleicht hilft das hier noch weiter: http://de.wikipedia.org/wiki/Gleitkommazahl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2011, 14:10
Beitrag #6

Hans lv-dau Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Nov 2008

8.6, 2010
1992
EN

79650
Deutschland
RE: Flatten to xml -> Zahlen fehlerhaft
Diskretisierung ist das Stichwort


Was ich aber nicht kapiere sind die Zusammenhänge:

-> warum schon so "früh", double sind doch 64bit?
die Beschreibungen der Begrenzungen zu Mantisse (11bit?) und Exponent (52bit?) liegen ja über 4225

-> warum bei 4225 und nicht z.B. bei 4096?
also was "binär nachvollziehbares"
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2011, 21:58
Beitrag #7

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
RE: Flatten to xml -> Zahlen fehlerhaft
Fließkommazahlen in binärer Computerdarstellung sehen immer so aus: 1,m * 2^e. m = Mantisse e = Exponent mit je nach Norm verschiedenen Anzahl von Ziffern. 4096 oder 4225 kommt nicht vor.

Im Dezimalsystem wär es so: 4,096 * 10^3, oder 1 * 10^1 oder ... Die Mantisse ist immer kleiner 10.

Der Diskretisierungsunterschied sollte bei vielen Zahlen auftreten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2011, 21:33 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2011 21:37 von rolfk.)
Beitrag #8

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Flatten to xml -> Zahlen fehlerhaft
(18.11.2011 14:10 )Hans lv-dau schrieb:  Diskretisierung ist das Stichwort


Was ich aber nicht kapiere sind die Zusammenhänge:

-> warum schon so "früh", double sind doch 64bit?
die Beschreibungen der Begrenzungen zu Mantisse (11bit?) und Exponent (52bit?) liegen ja über 4225

-> warum bei 4225 und nicht z.B. bei 4096?
also was "binär nachvollziehbares"

4096 ist ganz zufällig 2^12 also ein genaues Vielfaches von 2 und deshalb im binären Zahlensystem exact darstellbar. 4225 halt nicht und deshalb wird im Computer die nächstgrössere oder kleinere im Speicher darstellbare Zahl verwendet. LabVIEW numerische Controls enthalten eine Logic, die die eingestellte Prezision benützt und das erste nicht mehr dargestellte Digit verwendet um auf- oder abzurunden.

4225 wird im Speicher effektiv als 4424.99999999999999 abgespeichert da das die der gewünschten Zahl am nächsten kommende mögliche Zahl ist bei einer Double Floating Point Zahl ist. Solange Du das FP Control weniger als 14 Dezimalstellen (oder ~18 Digits) darstellen lässt, wird LabVIEW dir immer 4425 darstellen. Im XML File wird die Double Zahl aber mit maximaler Genauigkeit ausgegeben, da LabVIEW nicht wissen kann ob Dir 1, 5, 10, oder 13 Dezimalstellen wichtig sind. Die einzige Art und Weise um die maximale Übereinstimmung zu garantieren ist um die Zahl mit maximaler Genauigkeit abzuspeichern. Wenn LabVIEW nur 4225 im XML File abspeichern würde, wäre die resultierende Zahl beim Einlesen dieses Files eben nicht wirklich gleich sondern nur ähnlich.

Und falls Du wirklich nur in 4225 interessiert bist solltest Du natürlich auch eine Integerzahl als Datentyp verwenden.

GrundsÄtzlich ist dazu zu sagen: Der Fehler den LabVIEW anscheineind macht ist eben kein Fehler sondern eben das Gegenteil davon. Du als Interpretator machst hier den grösseren Fehler und bemängelst schlichtweg das LabVIEW zu exact arbeitet. Lösungen sind verschiedene:

1) Den richtigen Datentypen verwenden, wie hier Integer wenn die Nachkommagenauigkeit nicht erwünscht ist.
2) Die Interpretationsroutine (auch in Deinen grauen Zellen) so anpassen dass eben eingesehen wird, dass dies kein wirklicher Fehler ist, sondern prinzipbedingt mit der endlichen Genauigkeit von Zahlen in Computern zu tun hat. Nur weil Du das Dezimalsystem gewöhnt bist heisst das nicht das 4225 immer genau 4225 ist. Umgekehrt könnte ein Computer auch reklamieren dass seine schönenen binären Fliesskommazahlen nicht immer genau in unserem dezimalen Zahlensystem darstellbar sind ohne unendlich viele Nachkommastellen zu verwenden.
3) Und zu guter Letzt, das bemängelte Problem ist effektiv keines. Solange Du nicht mit extremen mathematischen Modellen zu tun hast, ist die Ungenauigkeit beim Messen immer ganze Logarithmen grösser als diese Ungenauigkeit durch die eingeschränkte Darstellbarkeit von Zahlen ist. Kannst Du wirklich behaupten dass bei einer Messung 4225 der exaktere Messwert ist dann 4424.99999999999999?

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.11.2011, 08:47 (Dieser Beitrag wurde zuletzt bearbeitet: 21.11.2011 08:48 von Hans lv-dau.)
Beitrag #9

Hans lv-dau Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Nov 2008

8.6, 2010
1992
EN

79650
Deutschland
RE: Flatten to xml -> Zahlen fehlerhaft
ok!
Vielen Dank an Alle für die Erläuterungen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: