AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Mathem. Parser -- bitte testen
Thema durchsuchen
Ansicht
Themen-Optionen

Mathem. Parser -- bitte testen

Ein Thema von dizzy · begonnen am 23. Mai 2004 · letzter Beitrag vom 2. Okt 2013
Antwort Antwort
Seite 7 von 11   « Erste     567 89     Letzte »    
Benutzerbild von dizzy
dizzy
Registriert seit: 26. Nov 2003
Hi DPler!

Ich habe noch so einiges an meinem Parser (hier schon mal vorgestellt) verbessert/geändert.

Habe jetzt auch ein Testprogramm geschrieben. Es führt einige Rechnungen durch, und gibt eine kleine Statistik dazu aus. Folgende Infos von euch würden mich brennend interesieren:
  • welche Dephi-Version hast du?
  • läufts/compilierts damit?
  • sind die Ergebnisse im Testprog korrekt?
  • CPU-Typ + Realtakt
  • die Ergebnisse der Geschwindigkeitsmessung des Testprogs
  • ist die Implementierung hübsch und sauber? (keine Leaks, styleguidekonform, verwendete Techniken...)
    (in CQParser.pas bzw. der QMath(2).pas - nicht das Testprog. Das ist fix zusammengeschustert )
  • hälst du den Parser für sinnvoll/einsetzbar?
  • Verbesserungs- und/oder Verschönerungs- und/oder Verschnellerungsvorschläge?
Wer Lust hat, der kann ihn sehr gerne komplett auseinandernehmen und kaputttesten. Ich will alles wissen *g*.

Ich erwarte sicherlich nicht von jedem alles beantwortet. Mir geht es hauptsächlich darum zu sehen mit welchen D-Versionen und CPUs der Parser korrekt arbeitet, und wie schnell er es tut (im Vergleich zu einer hardgecodeten Rechnung).

Tipp für die D8-User: Es gibt die Units "QMath" und "QMath2". Ändert im QT des Parsers und des Testprogramms in der uses-Klausel "QMath" auf "QMath2", weil "QMath" verwendet z.T. Assembler. Ich hoffe dass D8 die ganzen Casts zulässt . Wenn nicht, dann schreit!

Ihr würdet mir einen Riesen-Gefallen tun!

Danke euch schonmal im Voraus,
MfG - dizzy


\\div. Edits: Ein paar Umformulierungen - nix wildes...
Angehängte Dateien
Dateityp: zip cqparser.zip (17,9 KB, 581x aufgerufen)
INSERT INTO HandVonFreundin SELECT * FROM Himmel
 
Benutzerbild von Dani
Dani

 
Turbo Delphi für Win32
 
#61
  Alt 8. Jul 2004, 00:13
  • Delphi 6 Personal
  • Compiliert wunderbar und die Ergebnisse stimmen
  • AMD Athlon XP 1800+ 1533,333 Mhz

1195,79
1992,97
4718,33
8877,55

Dani H.
  Mit Zitat antworten Zitat
neolithos

 
Delphi 7 Architect
 
#62
  Alt 8. Jul 2004, 11:03
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.
Ü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.
Angehängte Dateien
Dateityp: exe test_129.exe (68,0 KB, 24x aufgerufen)
Dateityp: c test.c (1,5 KB, 25x aufgerufen)
  Mit Zitat antworten Zitat
NicoDE
 
#63
  Alt 8. Jul 2004, 12:13
Zitat von dizzy:
  • welche Dephi-Version hast du?
  • läufts/compilierts damit?
  • sind die Ergebnisse im Testprog korrekt?
  • CPU-Typ + Realtakt
  • die Ergebnisse der Geschwindigkeitsmessung des Testprogs
  • ist die Implementierung hübsch und sauber? (keine Leaks, styleguidekonform, verwendete Techniken...)
  • hälst du den Parser für sinnvoll/einsetzbar?
  • Verbesserungs- und/oder Verschönerungs- und/oder Verschnellerungsvorschläge?
  • Delphi 6 Personal Edition, Update Pack 2, RTL Update 3
  • compiliert und läuft damit
  • Ergebnisse sind korrekt
  • Mobile AMD Athlon 64 Processor 2800+ (x-1800 MHz)
Windows XP x86

848,759
1421,61
3571,95
7007,47

Windows XP x64 (Debug)

-7717,32
-13012,8
-31220
-61769,2


Gruss Nico
  Mit Zitat antworten Zitat
neolithos

 
Delphi 7 Architect
 
#64
  Alt 9. Jul 2004, 15:34
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.
Angehängte Dateien
Dateityp: dpr test2.dpr (2,2 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#65
  Alt 9. Jul 2004, 16:11


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


...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
Fabian K.
  Mit Zitat antworten Zitat
neolithos

 
Delphi 7 Architect
 
#66
  Alt 9. Jul 2004, 18:03
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!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#67
  Alt 9. Jul 2004, 18:42
Zitat von neolithos:
Bei meinem Optimierer tut er das auch!
Bei mir jetzt auch
Grad noch gefummelt... war, wie eigentlich immer, nur ein ganz kleiner blöder Patzer.

Zitat von neolithos:
Ich könnte meine Kenntnisse eventuell mit einfließen lassen!
Hinsichtlich Scanner -> Parser -> Compiler -> Virtuelle Maschine.
Das würde mich glaube ich sehr glücklich machen. Ich habe von Compilerbau im theroetischen Sinne nicht wirklich viel Plan, das kommt noch an der FH. Müsste sogar kommendes Semester was werden.
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 von neolithos:
Dann könntest du auch den wunsch von beliebigen Variablen erfüllen!
Auch mit meinem hübschen Bäumchen? Würd's gerne so lassen, da sich ja nun herausgestellt hat, dass beide Verfahren ja nun wirklich gleich schnell sind... Schon erschreckend gleich schnell *g*

Hatte mir da schon was mit arrays überlegt, in die der Benutzer selber Variablennamen eindefinieren könnte, in der Art:
DefineVar('var01', pi); 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 ).

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
Fabian K.
  Mit Zitat antworten Zitat
neolithos

 
Delphi 7 Architect
 
#68
  Alt 9. Jul 2004, 18:56
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!
  Mit Zitat antworten Zitat
mrsiemens
 
#69
  Alt 8. Nov 2004, 18:23
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
Angehängte Dateien
Dateityp: pas cqparser_892.pas (37,3 KB, 30x aufgerufen)
  Mit Zitat antworten Zitat
CalganX

 
Turbo Delphi für Win32
 
#70
  Alt 8. Nov 2004, 18:31
Hi,
ich würde dich bitten diese langen SourceCodes als PAS-Datei anzuhängen.

Danke,
Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 11   « Erste     567 89     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz