Forum: Mikrocontroller und Digitale Elektronik Algorithmus von Fließkomma zu Festkomma umwandeln


von John Doe (Gast)


Lesenswert?

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

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?


: Bearbeitet durch User
von John Doe (Gast)


Lesenswert?

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.

von Jan H. (j_hansen)


Lesenswert?

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.

von rmu (Gast)


Lesenswert?

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.

von Max G. (l0wside) Benutzerseite


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.