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.