Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Moin programier gerade ne Physik simulation, is net so wichtig. hatte nur die Idee currency statt single zu benutzen, und da ich erst nen Editor und dann erst die simulation progrmmiere währew es sehr zeitspaarend, vorher zu wissen, ob das große geschwindigkeitsverluste mit sich bringt.
Hab halt sehr viele (wohl so 1000) Iterationsschritte pro Sekunde mirt der menge Rechnungen und hab angst um meinen Proz diesbezüglich.
Wenn ich weiterkomme erzähl ich auch ma watt zum Programm (RoboterSimulation) vieleicht beschäftigt sich ja jemand mit sowatt???
Oder kennt Seiten mit nem ähnlichen Thema???
Der nachteil ist hallt,dass die nächte so kurz werden
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Currency ist eine Art int64, bei dem angenommen wird, die letzen 4 Stellen wären hinter dem Komma. Int64 ist unter Delphi sowieso nicht so schnell und bei einer Physiksimulation ist eine Gleitkommazahl besser geeignet. Vermutlich dürfe single ausreichen. Die Probleme die man durch die Ungenauigkeit von den Gleitkommazahlen bekommt lassen sich nicht immer durch mehr Nachkommstellen lösen. Deklarier die doch einen eigenen Type TFloatType=single oder TFloatType=extended und wenn es Probleme gibt, kannst du das immer noch anpassen.
Registriert: Mi Aug 20, 2003 09:15 Beiträge: 70 Wohnort: Italien
soweit ich weis, ist currency ein real-typ, der von der FPU des Prozessors gemanaged wird, ich könnte mich aber auch irren (verbessert mich bitte).
Und deshalb müssten sie etwa gleich schnell wie double sein (8byte).
Aber bei Physiksimulationen ist es meistens besser, dass man nicht übertrieben viele Schritte pro Sekunde ausführt, da bei allen Datentypen eines PCs rundungsfehler auftreten, die sich meistens hochschaukeln. Bei Berechnungen mit sin/cos und dem Datentyp double sind diese Fehler so stark, dass Frameraten über 100 nicht mehr akzeptable Fehler liefern...
100 Iterationen pro Sekunde müssten für jedes Physikalische Problem (außer du arbeitest mit extrem großen Geschwindigkeiten) ausreichen.
_________________ "Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein
Unter Borland Pascal hieß der Typ noch Comp - und es ist ein 64 Bit Integer (= 8Byte) der auf der FPU verarbeitet wird.
Wenn keine besonders großen Zahlen auftreten, und du Angst wegen Fließkommaungenauigkeiten hast, kannst du ja auch selbst Festkommaarithmetik implementieren (was der Currency Typ ja auch macht) - und z.B. die Ausprägung 347 eines Integers nicht als 347 sondern als 0.0347 (also als Zehntausendstel anstelle von Einern) interpretieren.
@Rechenungenauigkeiten:
die muss man dann halt abschätzen und eventuell Korrekturfaktoren (z.B. alle paar Zeiteinheiten rücksetzen auf einen Defaultzustand, wenn man z.B. weiß, dass man eine "volle Rotation" durchgeführt hat) einführen. Wie genau das aussehen könnte, hängt natürlich von der Problemstellung ab.
Registriert: Mi Aug 20, 2003 09:15 Beiträge: 70 Wohnort: Italien
Es gibt spezielle Techniken, mit denen man die idealen Deltas für die Zeit bei solchen Berechnungen berechnen kann. Dafür muss man aber den Rundungsfehler kennen (der sich linear mit den ausgeführten Berechnungen bewegt) und zum Anderen die Rechenfehler, die aufgrund der Annäherung der Formeln an die Wirklichkeit entstehen.
Wenn das Problem komplex genug ist, sind solche Korrekturen fast nicht mehr möglich: Man muss einen Kompromiss machen, der durch spezielle Algorithmen optimiert werden kann (da der Rechenfehler groß ist, wenn der Rundungsfehler klein ist[Delta groß] und umgekehrt, gibt es einen Mittelweg, der oft im Bereich vom 10^-2sek bis 10^-3sek liegt).
_________________ "Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein
Wird zwar jetzt doch ziemlich OT, aber ich geb' doch nochmal meinen Senf dazu: das Problem bei Simulationen ist ohnehin, dass die Zeit in der Realität kontinuierlich abläuft, in Simulationen aber praktisch lauter Standbilder in kurzen Abständen hintereinander berechnet werden müssen. D.h. es genügt nicht nur, z.B. eine beschleunigte Bewegung durch Deltas zu approximieren (was in diesem Fall nichts anderes als eine Annäherung der kontinuierlichen Ableitung der Geschwindigkeit nach der Zeit durch eine Treppenfunktion ist), sondern man muss das Ganze dann fallweise auch noch nach hinten korrigieren, damit (um bei einem praktischen Beispiel zu bleiben) das bewegte Objekt nicht plötzlich zur Hälfte in einer Wand steckt.
Interessant ist dabei, dass an und für sich scheinbar triviale Aufgaben, mit dem besten Superrechner nicht gelöst werden können: so ist es nicht möglich, voraus zu sagen, wie die Position dreier (ungefähr gleich schwerer) Körper im leeren Raum, die sich wechselseitig beeinflussen, nach einer bestimmten Zeit genau aussieht.
Registriert: Mi Aug 20, 2003 09:15 Beiträge: 70 Wohnort: Italien
Genau richtig.
Bei aktuellen Supercomputern werden ähnliche Algorithmen eingesetzt, wie diese bei vielen aktuellen PC-Spielen angewendwt werden. Das ist auch der Grund, weshalb man solchen Simulationsergebnissen (z.B. dass uns demnächst eine Eiszeit bevorstehen soll) nicht immer Glauben schenken sollte...
Die noch ziemlich "frische" Chaostheorie in der Wissenschaft möchte uns ja (auch) sagen, dass alle physikalischen Tatsachen (irgendwelche Beziehungen zwischen irgendwelchen Teilchen) nicht vorhersehbar, sondern nur mehr abschätzbar sind. So gesehen sind Physik-engines auf modernen PCs nicht schlechte Rechner, oder besser gesagt: Schätzer. .
_________________ "Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.