Moin Moin, ich möchte einen Algorithmus, der aktuell in Fließkomma implementiert ist, in Festkomma rechnen. Leider habe ich auf diesem Gebiet wenig Erfahrung, weshalb ich derzeit auf der Suche nach einer Quelle (möglichst Online) bin, die mir hier etwas weiterhelfen kann. Also Quasi ein kleiner Leitfaden für die Übersetzung Fließkomma->Festkomma. Würde mich über ein paar hilfreiche Informationen freuen! :) Mit freundlichen Grüßen John
zu wenig Informationen. ansonsten: https://de.wikipedia.org/wiki/Gleitkommazahl https://de.wikipedia.org/wiki/Festkommazahl
:
Bearbeitet durch User
Was fehlt dir denn an Informationen? Ich bin auf der Suche nach Skripten, Büchern usw. die sich mit dieser Thematik beschäftigen, z.B wie die Normierungen/Skalierungen durchzuführen sind.
John Doe schrieb: > Was fehlt dir denn an Informationen? Ich bin auf der Suche nach > Skripten, Büchern usw. die sich mit dieser Thematik beschäftigen, z.B > wie die Normierungen/Skalierungen durchzuführen sind. Das ist ja nicht gerade Raketenphysik. Diese paar Informationen auf ein Skriptum oder gar Buch aufgeblasen stelle ich mir sehr langatmig vor.
Ob und wie man da vorgeht hängt mMn stark vom Algorithmus ab. Manche eignen sich gar nicht für Fixkomma. Explorativ könnte man den Algorithmus bzw. einige Iterations-Schritte davon (falls das was iteratives ist) in einer Tabellenkalkulation bauen und dann sukzessive anfangen die einzelnen Größen auf eine fixe Anzahl Nachkommastellen zu runden. Analytisch würde man sich alle Berechnungen anschauen, den Wertebereich und die Genauigkeit der einzelnen Größen herausfinden bzw. abschätzen und danach die Datentypen bzw. das Komma festlegen. Overflows sollte man vernünftig behandeln wenn sie vorkommen, sonst stürzt wieder eine Rakete ab. Wenn man alle Details wissen will wird man sich den Knuth TAOCP Teil 2 o.ä. antun müssen.
Ich stand vor dem gleichen Problem. Ein paar Hinweise dazu: * In einen long passt ziemlich viel rein, und das kann auch ein 16-Bitter in endlicher Zeit rechnen * Divisionen durch Multiplikation und anschließenden Rechtsshift ersetzen, außer es geht gar nicht anders (variabler Nenner). * Wertebereiche prüfen, Wertebereiche prüfen, Wertebereiche prüfen. Überläufe sind die Hölle beim Debuggen. * Auf der anderen Seite den Wertebereich eines Long (32 Bit auf real existierenden Systemen) immer ganz ausnutzen, um keine Genauigkeit zu verlieren. * Bitshifts kosten quasi keine Laufzeit, im Zweifelsfall lieber einen mehr einbauen. * Ich habe die Rechenschritte zuerst in einem Excel-Sheet aufgeschrieben: in der ersten Spalte die Beschreibung, was da passiert; in der zweiten den Schritt per Fließkomma; in der dritten dann mit der ABRUNDEN-Funktion per Festkomma. In der vierten dann mittels Zweierlogarithmus, wie viele Bits der aktuelle Wert belegt. * In diesem Excel-Sheet kann man dann mit den Eingangsdaten spielen und sieht ziemlich schnell, wo es zu Überläufen kommt. * Für komplexere Funktionen (z.B. Logarithmus) kann man entweder eine Tabelle nehmen (wenn man genug Speicher hat) oder eine Taylorreihenentwicklung machen. Da kommt man mit zwei, drei Gliedern schon ziemlich weit. Wenn ich mich recht erinnere, kann Matlab so was auch automatisch generieren. Allerdings nur Matlab, nicht Octave oder SciLab.
Max G. schrieb: > * Wertebereiche prüfen, Wertebereiche prüfen, Wertebereiche prüfen. > Überläufe sind die Hölle beim Debuggen. > * Auf der anderen Seite den Wertebereich eines Long (32 Bit auf real > existierenden Systemen) immer ganz ausnutzen, um keine Genauigkeit zu > verlieren. Deshalb ganz genau prüfen, ob float wirklich nicht geht. Der Zeitaufwand zum Umstellen und Debuggen ist immens. Besonders bei PID-Regelungen lohnt sich float eigentlich immer. Heutige MCs und Compiler sind in der Regel schnell genug und haben auch ausreichend RAM. Ich hab mich auch früher lange Zeit mit Ganzzahl abgequält, das muß man sich nicht antun.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.