Variablengröße für Kreisberechnungen
Hallo mal wieder,
Mein Programm funktioniert im großen und ganzen recht ordentlich.
Ich habe auch mal ein größeres Objekt erzeugt und ein paar Runden drehen lassen.
Dabei habe ich "leider" festgestellt das sich mit jeder Runde einzelne Teile etwas verschieben. Es ist nicht viel aber es wird mit jeder Runde etwas mehr.
Das soll so natürlich nicht sein. Da ich auf einen Rundungsfehler in der Formel tippe wollte ich gleich mal fragen ob es an der Variablengröße liegen könnte?
Wir schon im Thread davor beschrieben, nutze ich für alle Berechnungen 32bit Werte (auch zum zwischenspeichern).
Sollte man hier lieber gleich auf 64bit Größen umsteigen um ein genaueres Ergebnis zu erhalten?
Die FPU rechnet meines Wissens sowieso mit 64bit, egal was man ihr auf den Stack geschoben hat.
Gruß, Nicky
Mein Programm funktioniert im großen und ganzen recht ordentlich.
Ich habe auch mal ein größeres Objekt erzeugt und ein paar Runden drehen lassen.
Dabei habe ich "leider" festgestellt das sich mit jeder Runde einzelne Teile etwas verschieben. Es ist nicht viel aber es wird mit jeder Runde etwas mehr.
Das soll so natürlich nicht sein. Da ich auf einen Rundungsfehler in der Formel tippe wollte ich gleich mal fragen ob es an der Variablengröße liegen könnte?
Wir schon im Thread davor beschrieben, nutze ich für alle Berechnungen 32bit Werte (auch zum zwischenspeichern).
Sollte man hier lieber gleich auf 64bit Größen umsteigen um ein genaueres Ergebnis zu erhalten?
Die FPU rechnet meines Wissens sowieso mit 64bit, egal was man ihr auf den Stack geschoben hat.
Gruß, Nicky
Please also mark the comments that contributed to the solution of the article
Content-ID: 171677
Url: https://administrator.de/contentid/171677
Printed on: October 4, 2024 at 06:10 o'clock
4 Comments
Latest comment
Moin
Wenn Du Pi aber z.B. nur mit 2 Stellen nach dem Komma verwendest wäre das egal.
Bei Kreisberechnung gibt es immer Rundungsfehler die sich aufsummieren.
Deshalb versucht man es zu vermeiden "weiterzurechnen".
Versuch Dir eine Formel zu erstellen mit der Du jede Position errechnet kannst ohne die Vorposition verwenden zu müssen.
Stefan
Zitat von @supernicky:
Mein Programm funktioniert im großen und ganzen recht ordentlich.
Ich habe auch mal ein größeres Objekt erzeugt und ein paar Runden drehen lassen.
? Welches Programm? Was macht das?Mein Programm funktioniert im großen und ganzen recht ordentlich.
Ich habe auch mal ein größeres Objekt erzeugt und ein paar Runden drehen lassen.
Dabei habe ich "leider" festgestellt das sich mit jeder Runde einzelne Teile etwas verschieben. Es ist nicht viel aber
es wird mit jeder Runde etwas mehr. Das soll so natürlich nicht sein. Da ich auf einen Rundungsfehler in der Formel tippe wollte ich gleich mal fragen ob es an
der Variablengröße liegen könnte?
Kann schon sein, wenn Du mit den vorrausberechneten Werten weiterrechnest wird die Abweichung immer größer.es wird mit jeder Runde etwas mehr. Das soll so natürlich nicht sein. Da ich auf einen Rundungsfehler in der Formel tippe wollte ich gleich mal fragen ob es an
der Variablengröße liegen könnte?
Wenn Du Pi aber z.B. nur mit 2 Stellen nach dem Komma verwendest wäre das egal.
Wir schon im Thread davor beschrieben, nutze ich für alle Berechnungen 32bit Werte (auch zum zwischenspeichern).
Sollte man hier lieber gleich auf 64bit Größen umsteigen um ein genaueres Ergebnis zu erhalten?
ja.Sollte man hier lieber gleich auf 64bit Größen umsteigen um ein genaueres Ergebnis zu erhalten?
Die FPU rechnet meines Wissens sowieso mit 64bit, egal was man ihr auf den Stack geschoben hat.
Aber es wird danach immer abgerundet/abgeschnittenBei Kreisberechnung gibt es immer Rundungsfehler die sich aufsummieren.
Deshalb versucht man es zu vermeiden "weiterzurechnen".
Versuch Dir eine Formel zu erstellen mit der Du jede Position errechnet kannst ohne die Vorposition verwenden zu müssen.
Stefan
Hallo,
Also, statt zu Rechnen
Ausgangssitutation: p(x,y)
Schritt 1: +1 Grad -> speichern p(x2,y2)
Schritt 2: +5 Grad -> speichern p(x3,y3)
kannst du machen
Schritt 1: +1 Grad -> Speichern +1
Schritt 2: + 5 Grad -> Speichern +6
Schritt 3: +10 Grad -> Speichern -4
Dann kannst du jederzeit die Position berechnen, in dem du die jeweilige Gesamtbewegung relativ zum Ausgangspunkt berechnest, statt zur vorherigen Position. Gibt wahrscheinlich weniger Stress mit Rundungen. Und nach 360 Grad solltest du natürlich auf 0 zurücksetzen.
Gruß
Filipp
Zu deinem letzten Satz.
Ich muss die Position immer anhand der Vorposition berechnen, da mein Objekt sich in alle Richtungen drehen kann und somit kein
Wert wie der vorige ist.
Klingt jetzt nicht an einem Argument. Du kannst ja statt die Position fortzuschreiben die Bewegungen aufsummieren.Ich muss die Position immer anhand der Vorposition berechnen, da mein Objekt sich in alle Richtungen drehen kann und somit kein
Wert wie der vorige ist.
Also, statt zu Rechnen
Ausgangssitutation: p(x,y)
Schritt 1: +1 Grad -> speichern p(x2,y2)
Schritt 2: +5 Grad -> speichern p(x3,y3)
kannst du machen
Schritt 1: +1 Grad -> Speichern +1
Schritt 2: + 5 Grad -> Speichern +6
Schritt 3: +10 Grad -> Speichern -4
Dann kannst du jederzeit die Position berechnen, in dem du die jeweilige Gesamtbewegung relativ zum Ausgangspunkt berechnest, statt zur vorherigen Position. Gibt wahrscheinlich weniger Stress mit Rundungen. Und nach 360 Grad solltest du natürlich auf 0 zurücksetzen.
Gruß
Filipp