Rolf B: sqrt unterschiedliche Ergebnisse auf unterschiedlichen Webseiten

Beitrag lesen

Hallo 1unitedpower,

JavaScript kennt nur 64-bit Floats

Ja, das kann man nachlesen. Aber wie ist das mit den Operationen? Die Intel FPU hat zumindest früher mal intern mit 80-bit Registern gerechnet. Muss man damit rechnen, dass es bei Intel, AMD oder Qualcomm Hardware unterschiedliche Ergebnisse bei Float-Operationen gibt?

Man könnte nun einfach mal anfangen und davon ausgehen, das 64-bittig gerechnet wird und alle beteiligten FPUs exakt gleich werkeln. Und dann kann man im Test (mit möglichst vielen Geräten unterschiedlicher Hersteller) schauen, um wieviel die berechnete Position der Geräte voneinander abweicht.

Man kann aber auch nach jedem Rechenschritt die Kugelpositionen auf vier Stellen runden (heißt: wenn man die Koordinaten von 0-9999 festlegt, entfernt man einfach die Nachkommastellen). Damit hat man zumindest Mikroabweichungen im Griff. Die Angaben zu Geschwindigkeit und Drall sollte man ebenfalls entsprechend runden.

Der Witz ist ja: Es fällt niemandem auf, wenn die simulierte Realität nicht ganz exakt ist. Im Gegenteil, eigentlich müsste bei jedem Bandenanprall ein winziger Zufallsfehler hinzugefügt werden, denn Banden sind niemals völlig exakt gefertigt. Sicherlich wird dein Modell auch aus Gründen der Performance vereinfacht sein. Wenn eine Billardkugel mit einem gewissen Impuls angestoßen wird, dann wird sie kurz gleiten und dann erst durch die Reibung mit dem Tuch anfangen zu rollen. Wenn eine rollende Kugel eine andere anstößt, überträgt sie Drehimpuls. Die weiße Kugel kann schräg angestoßen worden sein, so dass sie mit einer Drehung um die Z-Achse ankommt, was sich auf die angespielte Kugel überträgt - wenn Du das exakt haben willst, löst Du vermutlich Differenzialgleichungssysteme. Das wirst Du nicht wollen, du hast ein vereinfachtes Modell, und da fällt es gar nicht auf, wenn Du potenzielle Fehler wegrundest.

Die Idee, vor Spielstart auf den Clients ein paar Teststöße mit bekannten Ergebnissen rechnen zu lassen, könnte trotzdem noch nützlich sein.

Rolf

--
sumpsi - posui - clusi