![]() |
Re: Mathem. Parser -- bitte testen
1195,79 1992,97 4718,33 8877,55 :hi: |
Re: Mathem. Parser -- bitte testen
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe heute für mal schnell eine Stackmaschine zum Testen geschrieben.
Das Ergebnis sieht wie folgt aus. Deine Parser brauch ca zwischen 3000 bis 3400 ms. Meine Stackmaschine brauch ca zwischen 2800 bis 3100 ms. Dieses Ergebnis kann man als gleichschnell bewerten. :gruebel: Übrigens: Musste ich alle Tricks in C Anwenden, um native Stack-Operationen zu vermeiden. Sonst würde meine Maschine ein wenig über deinen Werten liegen. Aber das waren auch nicht viele ms. (glaube zw. 3900 und 4200 ms). Als Anhang gibt es das Saumäßig in der Schnelle getippte C-Programm. |
Re: Mathem. Parser -- bitte testen
Zitat:
848,759 1421,61 3571,95 7007,47 Windows XP x64 (Debug) -7717,32 -13012,8 -31220 -61769,2 Gruss Nico |
Re: Mathem. Parser -- bitte testen
Liste der Anhänge anzeigen (Anzahl: 1)
So jetzt wie versprochen (in der PN) die Pascal'sche Variante.
Übrigens sind es zwei Versionen in einer Datei: Die erste Ausgeklammerte lag bei ca 4000 ms. Also schneller als die gleichwerdige C-Variante. Ein hoch auf den Borland-Compiler-Optimierer. Die jetztige Variante, die CALL's vermeidet, liegt auch im Limit. zw. 3000 und 3200 ms. Also ein Tick langsamer als die C-Makro-Variante. Sind aber auch mehr Call's trinne. |
Re: Mathem. Parser -- bitte testen
:shock:
Formel: (1 + sin(pi/2))^3 * 2 Durchläufe: 5.000.000 Messmethode: GetTickCount Mein Parser als DLL-Version: 1450ms Als eingebundene Unit: 1530ms :?: DAS wundert mich schon etwas... Deine Stackmaschine: 1312ms :cry: ...ich spiele mit Umbaugedanken... *gnarf* ;) \\edit: Ich hab nen kleinen Fehler gemacht! Mein Parser hat das pi/2 immer wieder neu ausgerechnet - scheinbar klappt die Vorausberechnung von Konstanten noch nicht so ganz :? Wenn ich mit einer Variablen=pi/2 rechne siehts so aus: DLL-Version: exakt gleich schnell wie die Stackmaschine: 1312ms Unit: nur 1455ms Ich muss aber ganz offensichtlich noch mal an meinen Optimierer ran! Eigentlich ist ja die ganze Formel konstant, und von daher sollte die gesamte Formel zu einem Baum mit nur einem Knoten=16 zusammenschrumpfen. Das tut er ganz offensichtlich nicht! Mist :) |
Re: Mathem. Parser -- bitte testen
Bei meinem Optimierer tut er das auch!
Da entsteht nur noch "push 16"! Ich könnte meine Kenntnisse eventuell mit einfließen lassen! Hinsichtlich Scanner -> Parser -> Compiler -> Virtuelle Maschine. Dann könntest du auch den wunsch von beliebigen Variablen erfüllen! |
Re: Mathem. Parser -- bitte testen
Zitat:
Grad noch gefummelt... war, wie eigentlich immer, nur ein ganz kleiner blöder Patzer. Zitat:
Das Ding hier hab ich mir über längere Zeit zusammen gebastelt, und ausgebaut, und hab das Thema dabei etwas mit-gelernt. Aber so richtig in die Tiefe kommt man ja doch nicht. Zitat:
Hatte mir da schon was mit arrays überlegt, in die der Benutzer selber Variablennamen eindefinieren könnte, in der Art:
Delphi-Quellcode:
Da ließe sich auf diesem Wege bestimmt was machen. Bin da aber (noch) für alles offen (ist ja noch keine Zeile zu geschrieben ;)).
DefineVar('var01', pi);
Die neue Version mit funktionierendem Pre-Solving schiebe ich in den anderen Thread mit der Final-Version. Vielen Dank für dein Interesse und Unterstüzung!! gruss, dizzy |
Re: Mathem. Parser -- bitte testen
Vielleicht hast du es gesehen!
Ich mache mir derzeit eine Rübe wie man die Formel direkt als IA-32 Befehl in den Ram ablegen könnte, und ausführen. Leider sind meine ersten Test's noch nicht ganz geglückt. Das wäre aber die schnellste Variante. Und wäre auch eine schöne Übung, welche mich näher an mein Ziel heran bringt. Einen eigenen Compilier! :spin: |
Re: Mathem. Parser -- bitte testen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe mal den Parser um die Funktion erweitert, beliebig viele Konstanten in der Formel zu benutzen... Einfache Zuweisung mittels SetVariable(String, const Value) Vielleicht brauchts ja jemand :) |
Re: Mathem. Parser -- bitte testen
Hi,
ich würde dich bitten diese langen SourceCodes als PAS-Datei anzuhängen. Danke, Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz