Genau so könnte man aber Speed rausholen.
Grund: Wenn du die Formel zu einer schnell durchrechenbaren Sprache umcompilierst und opimierst, vermute ich, dass das Teil schneller wird.
Bei Meinem Formel-Parser (der langsamer ist, durch Typenkonvertierungen und
OOP) gehe ich wie folgt vor.
(1 + sin(A))^3 * (1+1)
Erster Schritt:
zerlegen in Token (Teile):
"1" "+" "sin" "(" "A" ")" "^" "3" "*" "(" "1" "+" "1" ")"
Dies erledigt eine while Schleife gekoppelt mit einer Matrix.
Baue aus den Tokens einen Parsebaum:
Dazu wird ein vor definierter Syntax-Graph durchlaufen.
-> Wieder nur eine while-Schleife
Optimiere den Code:
in dem Fall wird 1+1 zusammengefasst.
Erzeuge Code:
Code:
push 1
push a
sin
and
push 3
power
push 2
mul
Und die Ausführung dieses Code's könnte man extrem Optimieren.
Array für Stack.
Sprung-Tabelle für Proceduren.