Hallo,
bei diesem Parser handelt es sich um ein kleines Experiment. Nämlich mit möglichst wenig Code, so schnell wie möglich eine mathematisch korrekte Lösung zu bekommen.
Für die, die sich fragen warum man so etwas macht:
Vor etwas längerer Zeit, hat hier mal jemand nach dem kürzesten Code zum Rechnen unter Befolgung der Rechenregeln gefragt. Und ich hatte auch schon einen Ansatz dafür, der jedoch nur die vier Grundrechnungsarten konnte (ohne Klammern). Aber er war kompakt (41 Zeilen Code) und lief schnell (Im Schnitt, 0,0094ms für die Rechnung 3-4*2+1/2*7+5*4-3/2*6*4).
Danach habe ich das Ganze eine Zeit lang nicht beachtet, aber vor Kurzem ist das Interesse aufgekommen, den Parser um das Potentzieren, Klammern, Funktionen, Variablen und Konstanten zu erweitern, aber trotzdem in den drei Kernpunkten gleich zu bleiben: Möglichst wenig Code, möglichst schnell und richtig.
Dabei ist folgendes entstanden:
Da der Code leider zu lang ist, hab ich ihn als Anhang hochgeladen: SimpleParser.vb
Ohne Kommentare und Leerzeilen "nur" 468 Zeilen.
Getestet habe ich mit 10000 Durchläufen
Wenn man die Funktionen, Variablen, Klammerkorrektur, Konstanten deaktiviert, braucht er im Durchschnitt ca 0,028ms für folgende Rechnung: (3-4^2)*1/(((2*7+5)*4-3)/2)*6*4
Ist alles aktiviert, außer Funktionen, benötigt er für die selbe Berechnung durchschnittlich ca. 0,032ms
Und wenn alles aktiviert ist, benötigt er durchschnittlich ca. 0,05ms
Wie gesagt, ist eher experimenteller Natur, aber vl Interessiert ja jemanden die Arbeitsweise oder jemand weiß, wo man noch etwas tunen könnte (Zeitmäßig, nicht Zeilenmäßig :)).
bei diesem Parser handelt es sich um ein kleines Experiment. Nämlich mit möglichst wenig Code, so schnell wie möglich eine mathematisch korrekte Lösung zu bekommen.
Für die, die sich fragen warum man so etwas macht:
Vor etwas längerer Zeit, hat hier mal jemand nach dem kürzesten Code zum Rechnen unter Befolgung der Rechenregeln gefragt. Und ich hatte auch schon einen Ansatz dafür, der jedoch nur die vier Grundrechnungsarten konnte (ohne Klammern). Aber er war kompakt (41 Zeilen Code) und lief schnell (Im Schnitt, 0,0094ms für die Rechnung 3-4*2+1/2*7+5*4-3/2*6*4).
Danach habe ich das Ganze eine Zeit lang nicht beachtet, aber vor Kurzem ist das Interesse aufgekommen, den Parser um das Potentzieren, Klammern, Funktionen, Variablen und Konstanten zu erweitern, aber trotzdem in den drei Kernpunkten gleich zu bleiben: Möglichst wenig Code, möglichst schnell und richtig.
Dabei ist folgendes entstanden:
Da der Code leider zu lang ist, hab ich ihn als Anhang hochgeladen: SimpleParser.vb
Ohne Kommentare und Leerzeilen "nur" 468 Zeilen.
Getestet habe ich mit 10000 Durchläufen
Wenn man die Funktionen, Variablen, Klammerkorrektur, Konstanten deaktiviert, braucht er im Durchschnitt ca 0,028ms für folgende Rechnung: (3-4^2)*1/(((2*7+5)*4-3)/2)*6*4
Ist alles aktiviert, außer Funktionen, benötigt er für die selbe Berechnung durchschnittlich ca. 0,032ms
Und wenn alles aktiviert ist, benötigt er durchschnittlich ca. 0,05ms
Wie gesagt, ist eher experimenteller Natur, aber vl Interessiert ja jemanden die Arbeitsweise oder jemand weiß, wo man noch etwas tunen könnte (Zeitmäßig, nicht Zeilenmäßig :)).
SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=
Weil einfach, einfach zu einfach ist!
Weil einfach, einfach zu einfach ist!