Hi,
Beispiel ist der berühmte Taschenrechner, der einen String auswertet und die darin enthaltene Rechnung in arithmetischer Schreibweise (oder auch bereits in polnischer Notation) ausrechnet.
Kann man das so auflösen, dass man den Lösungsansatz immer verwenden kann?
Ich würde sagen, da müsstest du eben für jede Rechenart deine eigene Näherung machen.
Beispiel bei +:
Wenn höchste mögliche Zahl (0-1) minus erster Summand kleiner als der zweite Summand ist würde die Rechnung zu einem Überlauf führen.
(angenommen du rechnest nur mit positiven Zahlen)
Bei * das gleiche mit geteilt statt minus.
Usw. ...
So würde es ich machen, aber keine Ahnung ob das ein guter Weg ist.
Je nachdem wieviel Zeit du für das Problem noch aufwenden willst könntest du auch mal in den Code eines fertigen Taschenrechners schauen.
Ich habe mal kurz den Code von gcalctool, das ich als Taschenrechner unter Ubuntu verwende, überflogen.
Es sind gut 11000 Zeilen Code (aber teilweise nur Zeug für die GUI).
In der Datei mpmath.c die letzte Funktion (calc_factorial) ist für das Berechnen der Fakultät zuständig.
Der Überlauf entsteht in Zeile 1159 oder 1160 (ich glaub eher in 1160) beim Aufruf der Funktionen aus mp.c.
Ich hab dann noch bisschen tiefer reingeschaut, aber bei den goto-Anweisungen in mpmul2() (auch in mp.c) hatte ich fürs erste keine Lust mehr.
Aber ich glaube eh, dass der Overflow eher in cast_to_double (mp.c) in Zeile 782 und folgenden irgendwie ausgewertet wird.
Vielleicht kann ich mich morgen nochmal motivieren, mich da bisschen tiefer reinzuarbeiten, weil das interessiert mich auch, wie das geht.
mfG,
steckl