Moin!
ja, spinn ich denn? Wenn man von einer ganzen Zahl mehrmals zwei Zehntel abzieht, MUSS man doch irgendwann auf NULL kommen, oder?
Ein Grundsatz beim Rechnen mit Fließkommazahlen im Rechner lautet: Es gibt immer Rundungsfehler. Deshalb kann man niemals darauf vertrauen, dass nach Ablauf von einem (oder gar mehreren) Rechenschritten ein gewünschter Zielwird wirklich zu 100% exakt getroffen wird, so dass man ihn mit "==" abfragen kann, sondern man sollte immer damit rechnen, dass man nur Werte erreicht, die "knapp daneben" liegen.
Für deinen Fall bedeutet das zwei mögliche Lösungsansätze:
1. Wenn du deine Funktion ein wenig umschreibst, so dass in einer Variablen die Bewegungsrichtung eindeutig festgelegt ist, dann könntest du einfach abfragen, ob xvon größer als xbis ist (bei Vorwärtsbewegung, d.h. Addieren positiver Werte) bzw. ob xvon kleiner als xbis ist (bei Rückwärtsbewegung), und dann xvon einfach gleich xbis setzen.
2. Alternativ kannst du prüfen, ob die Differenz von xvon und xbis ziemlich klein ist. Wie klein "klein" sein soll, hängt natürlich vom Einzelfall ab, wenn du eine Schrittweite von 0,1 hast, sollte die Differenz abs(xvon-xbis) < 0,1 sein, denn dann liegst du in einem Bereich von weniger als einer Schrittweite von deinem Zielwert und könntest dann einfach xvon = xbis setzen. Für eine Animation sollte das ausreichen.
- Sven Rautenberg