R
dot schrieb:
Charakteristisch für Festkomma ist jedenfalls, dass es eben für Zahlen einer gewissen Größenordnung gedacht ist.
das problem mit float ist, dass es gewissermassen auch so ist, es ist quasi ein fix point, dem man jedesmal mitgibt wie der wertebereich ist.
bei statischen fix points muss man sich damit auseinander setzen, weil eine bereichsueber/unterschreitung zu fehlern fuerht. bei floats hat man hingegen grundsaetzlich einen viel kleineren bereich der sicher abgedeckt ist und wenn der bereich ueber-/unterschritten ist, wird der 'fehler' silent ignoriert und einfach die range angepasst.
das sieht man nicht mit dem auge, aber es kann sein, dass sich irgendwelche physic objekte ploetzlich zueinander ueberschneident verhalten, nur weil man sie weiter vom zentrum der level bewegt hat.
das lustige ist eigentlich, dass wissenschaftler mit floats (bzw eher mit doubles) genau so arbeiten wie graphikprogrammierer mit fix point gearbeitet haben. sie waehlen algorithmen oft danach aus (und implementieren sie so) dass der wertebereich nur einen gewissen maximalfehler hat. und fuer sie ist die genauigkeit von double so limitierend wie es bei graphik mit fixpoint ist.
man simuliert eine galaxie und in dieser die einzelnen sternensysteme, bei deren entstehung ist es quasi bis runter zum staub den man simulieren will.
hier gab es mal ein thread wie man ausrechnet wieviel flops eine funktion hat und manche haben es fuer nicht machbar gehalten alle operationen zu zaehlen, wissenschaftler gehen soweit die fehler anhand der operationen zu zaehlen (was nicht nur die operationen sondern die reihenfolge der operationen und die zu erwartenen wertebereiche einzelner register miteinbezieht).
fuer graphic/spiele sind floats einfach nur ein fire&forget weg, quasi das arithmetisch, was C#/java VMs fuer den speicher sind.
bei fix point musste man sich gedanken machen
bei float24 (z.b. radeon 9500) musste man noch alle objekte relativ zur kamera schieben
bei float32 hat man nur noch bei weltraumspielen und bei speziallfaellen probleme (z.b. manchmal in physics wenn die schrittweite zu klein wird oder wenn man cascaded shadow maps macht und sie stabil halten will).