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!
27.02.2015, 20:12 (Dieser Beitrag wurde zuletzt bearbeitet: 27.02.2015 20:13 von Andre_A.)
Ich bin ein wenig verwirrt, was das Problem angeht, über das ich heute gestolpert bin.
Ein Student hat ein (extrem schlechtes!) VI geschrieben, um eine Zahl in ein Array aus Ziffern umzuwandeln.
Die Umsetzung ist nicht das Problem, sondern das Ergebnis.
Das VI ist im Anhang. Die äußere FOR-Schleife habe ich darum gelegt, um das zu untersuchen.
Wie das ganze funktionieren soll, sei mal am Beispiel der Zahl 13 dargestellt, (die umzuwandelne Zahl
ist der Laufindex der For-Schleife):
1. 13/10 = 1,3 > 1 ; While Schleife terminiert nicht, 1,3 ins shift
2. 1,3 - [floor(1,3) = 1] = 0,3
3. 0,3 * 10 = 3
4. floor (3) = 3 -> ins Array
Ergebnis: ein Array mit [1] und [3] nach dem umkehren. Soweit so gut.
Das Problem ist, das gleiche Prinzip funktioniert nicht mit den Zahlen 12,14,23,24,28 .....
Mit diesen Zahlen <30 habe ich das mal getestet. Habe auch Zwischenergebnisse mit Haltepunkten u.ä. ausgewertet.
Bei der Zahl 12 z.B. liegt der Fehler in floor(2) = 1 laut Labview...
Mal abgesehen davon, dass die Umsetzung schlecht ist, kann jemand erklären, warum die Ergebnisse so sind, wie sie sind ?
Gruß,
Andre
Anzeige
27.02.2015, 21:10 (Dieser Beitrag wurde zuletzt bearbeitet: 27.02.2015 21:14 von GerdW.)
Wikipedia hat da eine gute Übersicht zum Einstieg in das Rechnen mit Gleitkommazahlen. Lesenswert!
Und in meiner Signatur findest du einen englischsprachigen Artikel zum Thema!
Allgemein: Dein Problem tritt in jeder Programmiersprache auf, die Floats nach IEEE754-Standard benutzt! Unendliche (Binär-)Brüche lassen sich nun mal schlecht in 64bit darstellen…
Ich kenne das Problem natürlich aus anderen Programmiersprachen
insbesondere beim Versuch Gleichheit zweier Zahlen zu Prüfen.
Es ist nur das erste mal, dass mir dies in LV vorgekommen ist, dazu noch
an einer Stelle, an der ich es so nicht erwartet hätte. Da lobe ich mir doch
manchmal die standardmäßige wissenschaftliche Notation...