Hallo max,
"anschließend eine Division mit 100 durch ... und tada !!! Das VI macht das, was es machen soll"
Jetzt vielleicht. Aber später, irgendwann, mit anderen Zahlenbereichen...
Deine Addition ist weiterhin (rundungs-)fehlerbehaftet. Das Konvertieren nach I32 rundet deinen Wert - mit möglicherweise weiterer, ungewünschter Rundung. Die Division mit 100 führt weitere "Rechenfehler" ein, da 1/100 wie auch schon 1/10 nicht als (endlicher) Binärbruch darstellbar ist...
Rechnen mit Gleitkommazahlen kann so "unschön" sein
![Smile Smile](images/smilies/smile.gif)
' schrieb:Wie wär's denn, statt dbl i32 zu verwenden. Ganzzahlen haben von Natur aus keine Rundungsfehler.
Ich erstelle eine Anwendung die einen
Graphen ausspuckt, der ne
Zeitachse hat und diesem als Einheit die
Sekund verwendet wird. Da aber meine Werte nicht alle paar Sekunden, sondern sich etwa im ms-Bereich befinden, hab ich mit dbl gearbeitet.
Hmmm ... ich müsste dann den ganzen Code davor (boh das ist viel, da ich viele SubVIs habe) an ms anpassen und dann bei der Zeitachse am Ende wieder dbl ausgeben. Aber für die Ausgabe des Graphen könnte das eigentlich reichen, solange am Ende nicht wieder so ein ähnliches Rundungsproblem auftritt!
Danke !!! Ich denke das werde ich ausprobieren!
' schrieb:Deine Addition ist weiterhin (rundungs-)fehlerbehaftet. Das Konvertieren nach I32 rundet deinen Wert - mit möglicherweise weiterer, ungewünschter Rundung. Die Division mit 100 führt weitere "Rechenfehler" ein, da 1/100 wie auch schon 1/10 nicht als (endlicher) Binärbruch darstellbar ist...
Rechnen mit Gleitkommazahlen kann so "unschön" sein![Smile Smile](images/smilies/smile.gif)
Ja da hast du absolut recht!
Ich hab jetzt über 210 Stunden für mein Projekt investiert und jetzt sehe ich plötzlich das mir mein Graph nicht genau Werte in so einem kleinen Wertebereich (also 2-3 Nachkommastellen) liefert. Er spuckt mir die Werte nicht bis zum Schluss aus oder bestimmte Zeichnungen fangen entweder ein tick zu früh oder ein tick zu spät anfangen ... Der Code sieht logisch aus aber das Ergebniss nicht
![Big Grin Big Grin](images/smilies/biggrin.gif)
Hallo max,
Tipps dann für's nächste Projekt:
- bei äquidistanten Messwerten mit Waveforms arbeiten
- Zeit in ms als I32 merken, X-Achse des Graphs per Rechtsklick->Formatting->Scales->Offset/Multiplier umrechnen lassen
- Grundregel für's Rechnen mit Gleitkommazahlen: wiederholte Rechenoperationen meiden bzw. umformen (statt n-mal eine Schrittweite zu addieren könnte man auch die Schrittweite mit dem Loop-Iterator multiplizieren...)
' schrieb:Tipps dann für's nächste Projekt:
- bei äquidistanten Messwerten mit Waveforms arbeiten
- Zeit in ms als I32 merken, X-Achse des Graphs per Rechtsklick->Formatting->Scales->Offset/Multiplier umrechnen lassen
- Grundregel für's Rechnen mit Gleitkommazahlen: wiederholte Rechenoperationen meiden bzw. umformen (statt n-mal eine Schrittweite zu addieren könnte man auch die Schrittweite mit dem Loop-Iterator multiplizieren...)
Wenn du mit Waveforms die Funktionen unter
Signalverarbeitung ->
Signalverlauferzeugung und/oder
Signalerzeugung meinst, dann hab ich damit zwar am Anfang ein wenig experimentiert, bin dann aber auf mein System umgestiegen ... ich könnte versuchen, wieder zurück zum alten System zu wechseln, weiß aber nicht, wie lange ich dafür dann brauchen werde.
Und auf den dritten Tipp bin ich auch kurz vor deiner Antwort drauf gekommen und das
funktioniert wirklich gut!
Hallo max,
Waveform ist ein Datentyp von LabVIEW (wie er von den von dir erwähnten Funktionen benutzt wird):
[
attachment=27506]
Zu finden u.a. bei den IO-Frontpanel-Elementen gleich links oben.
Sogar in HD. Da fehlt nur noch "Dolby Digital" - Sound.
![Big Grin Big Grin](images/smilies/biggrin.gif)
Ich finde die Idee klasse.
Gruß Markus
' schrieb:Edit: und ein Video zum Fehler zeigen, ist ja was ganz neues-> Luxus pur ![Big Grin Big Grin](images/smilies/biggrin.gif)