Autor Beitrag
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 15.07.11 20:57 
π - Matheparser/Taschenrechner


Das Projekt "π"/"Pi" habe ich gestartet als einen Ersatz für den Windows-Taschenrechner, hauptsächlich um es selbst zu verwenden: mich hat immer gestört, dass das Eingeben längerer Ausdrücke nicht unbedingt einfach ist. Ein Ausdrucksparser musste also her, und das ganze mit einer zusätzlichen Anforderung: per ac'tivAid habe ich nämlich den Taschenrechner auf einem Shortcut, es soll also sehr schnell starten. Ein komplettes CAS fällt da natürlich aus ;)


Aktuelle Version
Die aktuellen Quellen finden sich immer auf Github, hier gibts lediglich vereinzelte Binaries.
Aktuell: Version 9 (zip, 696.36 KB).


Funktionen
Screenshot (png, 20.39 KB)
Erstelltes Diagramm (png, 44.53 KB)
Intern wird mit 80bit Extended gerechnet, das sollte ausreichend sein: "Harry knew pi out to 3.141592 because accuracy to one part in a million was enough for most practical purposes. Hermione knew one hundred digits of pi because that was how many digits had been printed in the back of her math textbook."*

Handbuch

Code-Überblick



How To Build
Verwendet habe ich Delphi 7. Es sollte keine Unicode-Probleme geben, aber getestet ist das auf nichts neuerem. (Update: FinnO sagt mir, dass TreeNT ein Problem ist. Kann man aber unfallfrei ersetzen, sieht dann nur altmodischer aus).

Stimmt nicht mehr! Hier nur noch als Archiv:Einzige verwendete Fremdkomponente ist TTreeNT von Mike Lischke.
ACHTUNG: in Zeile 4955 dort ist ein Bug! Korrekt müsste die lauten:
ausblenden Delphi-Quelltext
1:
StrLCopy(Item.pszText, PChar(Node.Text), Item.cchTextMax-1);  // SH 2011-08-28: leave room for final #0					

Ein Patch findet sich bei GitHub.



Geplant
Wie gesagt, noch ist das Ganze lange nicht fertig. Geplant sind noch einige Dinge, aber für eine Einzelperson ist das doch etwas zeitfressend ;-)
Eine mehr oder weniger (un)vollständige Wunschliste pflege ich auf Github.
Einloggen, um Attachments anzusehen!
_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."


Zuletzt bearbeitet von Martok am Fr 22.01.16 02:02, insgesamt 31-mal bearbeitet

Für diesen Beitrag haben gedankt: Marc., Mathematiker, Narses
acnut
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 172
Erhaltene Danke: 3

Windows 7, Windows Vista, Windows XP, Ubuntu, Kubuntu, Pardus
Delphi 2010 SV, Java Editor, VS 2010 SV
BeitragVerfasst: Fr 15.07.11 21:09 
also mir gefällts ;)
von der schriftart und von der "oerfläche" her ähnelt es dem derive programmen von ti und das gefällt mir auch sehr ;)

was nett wäre: wenn ich z.b 2+2 und dann enter drücke und dann weiterrechne möchte mit den rechenoperatoren z.b /*-+ dann funkt das nicht und ich krieg eine zugriffsverletzung. besser wär also gleich von selbst ans zu schreiben und dann/*-+



ich wünsch dir erfolg bei der weiterentwicklung und warte gespannt auf die neue version ;)

_________________
Hey, die Sonne scheint, da werd ich mal in kurzen Hosen fernsehn…
Teekeks
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: Fr 15.07.11 23:32 
Ah!
Veröffentlichst du den jetzt.
Finde ich gut!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 15.07.11 23:53 
Moin!

Sieht vielversprechend aus, ich werd´s auch mal verfolgen. :zustimm:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 01.08.11 04:24 
So, erstmal: wow, ganz schön viele Reaktionen :oops:

user profile iconacnut hat folgendes geschrieben Zum zitierten Posting springen:
was nett wäre: wenn ich z.b 2+2 und dann enter drücke und dann weiterrechne möchte mit den rechenoperatoren z.b /*-+ dann funkt das nicht und ich krieg eine zugriffsverletzung. besser wär also gleich von selbst ans zu schreiben und dann/*-+
Die Zugriffsverletzung war ein "falscher Fehler", da hätte eigentlich ein Syntax Error kommen sollen.
Das mit dem Weiterrechnen ist mir auch aufgefallen, aber nicht so ganz einfach. Das funktioniert, wenn ich mit dem Ergebnis etwas tun will, was "rechts dran" kommt. Aber wenn ich z.B. eine Funktion drauf anwenden will, nutzt mir das vorausgefüllte nix, es stört sogar eher. Ich hab das mal am Taschenrechner (also, Hardware ;) ) getestet: Casio fügt bei Eingabe eines Operators als ersten Tastendruck nach dem '=' automatisch 'Ans' davor ein, bei allem anderen nicht. Müsste ich mal sehen, wie man das sauber hinbekommt.


Jedenfalls: ich habe jetzt endlich mal Zeit gefunden, den ersten Beitrag zu überarbeiten. Dabei ist er gleich ungefähr 3mal so lang geworden :roll: Dafür steht da jetzt wirklich alles drin, was man wissen muss :)
Außerdem ist der Parser komplett neu geschrieben... das mit dem Auto-Balancing Tree war eher nix. Jetzt wird ordentlich Tokenized, da funktionieren dann auch seltsam verschachtelte Klammerwälder ordentlich. Führt allerdings auch dazu, dass viele Operator-Fehlverwendungen einfach nur mit "Leftover Token" quittiert werden. Naja. Man kann ja nicht alles haben :zwinker:

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 07.08.11 05:39 
Und wieder ein Update. Diesmal ist der 1. Beitrag wieder kürzer geworden :)
Dafür gibt's die Dokumentation in einem separaten (oben verlinkten) Dokument.

Außerdem neu: Bugfixe bei Funktionen/Expressions ohne Argumente und unerwarteten Zeichen und 3 neue Funktionen, die Kontexte anlegen (new), löschen (drop) und Variablen daraus löschen (undef).


Frage in die Runde: welche Konstanten könnte man denn so brauchen? Ich könnte jetzt einfach mal unsortiert die Konstantenliste aus'm Tafelwerk abschreiben, aber da ist dann ja viel dabei das keiner braucht.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: So 07.08.11 14:10 
Naja... willst du Mathematiker Oder auch andere Naturwissenschaftler ansprechen?
Potentiell gesehen wären dass sehr viele konstanten. Mach doch einfach eine ini-Datei dafür, dann kann jeder sich selbst benötigte Konstanten hinzufügen.
acnut
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 172
Erhaltene Danke: 3

Windows 7, Windows Vista, Windows XP, Ubuntu, Kubuntu, Pardus
Delphi 2010 SV, Java Editor, VS 2010 SV
BeitragVerfasst: So 07.08.11 14:46 
also ich würde beide gruppen ansprechen, da man es am ende der breiten masse freigeben kann.

also im anhang findest du die physikalischen konstanten, die laut dem lehrer wichtig für meine matura waren.
und mathe-konstanten hab ich nur als formelheft zur verfügung :( wirst aber leicht im net finden ;)


mfg
acnut
Einloggen, um Attachments anzusehen!
_________________
Hey, die Sonne scheint, da werd ich mal in kurzen Hosen fernsehn…
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 08.08.11 05:08 
user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Naja... willst du Mathematiker Oder auch andere Naturwissenschaftler ansprechen?
Wie mir immer wieder gesagt wird: Mathematiker rechnen nicht. Scheint auch zu stimmen, da gibts außer Pi, e und dem Goldenen Schnitt nicht viel...

user profile iconacnut hat folgendes geschrieben Zum zitierten Posting springen:
also ich würde beide gruppen ansprechen, da man es am ende der breiten masse freigeben kann.
Ja, denke ich auch. Ich brauche ja selber mehr Ingenieur-Zeugs, also schon einen großen Teil der physikalischen. Aber eher weniger Astrophysik :P


user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Potentiell gesehen wären dass sehr viele konstanten. Mach doch einfach eine ini-Datei dafür, dann kann jeder sich selbst benötigte Konstanten hinzufügen.
Das wird es später über ausführbare Skripte geben, denke ich. Geht hier erstmal um die "Grundausstattung".

Ich bau da grade sowas ähnliches wie Mathematica: eine Funktion, die man dann nach dem Langnamen der Konstante fragen kann:
ausblenden Quelltext
1:
2:
>  const('SpeedOfLight')
=  299792458

Einige wenige davon werden dann standardmäßig in den Constants-Kontext geladen; weitere kann man sich natürlich einfach in Variablen kopieren.

Außerdem kann man abfragen, als was eine Konstante definiert ist:
ausblenden Quelltext
1:
2:
>  constinfo('Boltzmann')
=  Boltzmann = 1.38065E-23 [J/K] (MolarGasConstant/Avogadro)
constinfo() ohne Parameter gibt eine Liste aller bekannten Konstanten aus.


user profile iconacnut hat folgendes geschrieben Zum zitierten Posting springen:
also im anhang findest du die physikalischen konstanten, die laut dem lehrer wichtig für meine matura waren.
und mathe-konstanten hab ich nur als formelheft zur verfügung :( wirst aber leicht im net finden ;)
Und wieder einmal zeigt sich, dass Sachsen-Anhalt-Abitur schwerer ist als der Rest der Welt. Bei uns waren immer 5 signifikante Stellen Minimum. Mit deinen Werten kann man ja fast Kopfrechnen ;)


Erster Schuss, ihr könnt ja mal einen Blick drauf werfen: Github Diff

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 28.08.11 19:22 
Nach ein paar Tagen basteln ist mal wieder ein Stand erreicht, den man vorzeigen kann.

Link ist oben; Änderungen gegenüber TP3:
- viele Bugfixes/Verbesserungen in der Richtung dass der Parser logischer wird
- das im letzten Beitrag vorgestellte Konstanten-zeugs
- das Komma auf dem Ziffernblock wird jetzt in den neutralen Dezimaltrenner '.' übersetzt
- Nach einer Berechnung wird das Eingabefeld mit 'ans' vorbefüllt: entweder überschreiben oder einmal "Pfeil rechts" und weiter verketten
- Ausgaben haben jetzt schmale Leerzeichen als Tausendertrenner (Mathematica... mal wieder)
- Listen.

Listen können per L() oder Range()-Funktion erstellt werden, siehe Readme. Darauf kann man dann mit Each() itererieren und eine neue Liste der gleichen Länge bekommen, oder auch per Aggregate() Aggregate (z.B. Summe, Produkt über einer Reihe) berechnen. Mehrere Listen verkettet man per Merge()
Spannend dabei ist, dass das ganze relativ speichereffizient ist (Eine Liste von 2 Mio typvarianten Werten umfasst knapp 30MB). Man sieht allerdings auch, dass ich nicht wirklich auf Geschwindigkeit optimiert habe: diese per Aggregate zählen dauert dann fast 15 Sekunden ;)
Für kleinere Bereiche ist das allerdings völlig ausreichend; für die geplanten Statistik-Tools auf wenigen (maximal einige hundert) Messwerten gut genug.

Wer das jetzt auf XE compilieren möchte, bitte mal Blogeintrag beachten. Ich garantiere da für nichts mehr ;-)
Dafür gibt's jetzt die Binaries in GitHubs Downloads-Paket-Dings (oder nach wie vor oben verlinkt).

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
NoLe_Kazuik
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17
Erhaltene Danke: 2

Windows 7
VisualStudio 2010
BeitragVerfasst: Mo 29.08.11 10:10 
Hallo Martok,

dein Parser find ich echt gut, aber könntest du deine Readme vielleicht als PDF oder so offline mit zur Verfügung stellen und diese mit deinem Programm verzippen und beides zusammen liefern?!

Oder die Readme zusätzlich mit in dein Programm einbauen. Das wäre auch ne gute Lösung.
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 31.08.11 16:19 
Meinst du, es gibt Leute die ein Handbuch lesen würden? :D

Ja, das mit dem Einbauen scheint keine schlechte Idee zu sein. Mal sehen, wie ich das am einfachsten mit möglichst wenig Aufand hinbekomme.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 31.08.11 18:18 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Meinst du, es gibt Leute die ein Handbuch lesen würden? :D


Im nachhinein, wenn etwas wirklich nicht so klappt wie man es wünscht, dann kann auch so etwas mal passieren. :D

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 12.10.11 20:07 
Hey, es lebt noch ;)

Nachdem ich festgestellt hab, dass da ein ganz dummer Operator-Precedence-Fehler drin war, hier eine Version die auch richtig rechnen kann :roll:

Der Download ist jetzt ein Archiv zusammen mit der Readme, welche auch direkt im Programm angezeigt werden kann. Wenn mir jemand einen Markdown->RichEdit-Formatter findet, auch "in hübsch".

Es gibt ein neues Kommando: Clear() leert die Konsole.

Und da wir jetzt endlich richtig rechnen können, hab ich mich entschlossen, das ganze nicht mehr Tech Preview zu nennen, sondern jetzt echt "Version 1".


Downloadlink ist im ersten Beitrag.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 13.10.11 00:30 
Getreu dem Motto:
DeddyH:
Wenn Dein Programm nicht macht, was es soll, nenn es einfach "Version 1.0"

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 26.01.12 16:13 
Ihr habt bestimmt gedacht, ihr seid mich los?
Falsch gedacht, ich arbeite ab und zu noch dran :twisted:

Grade eben hab ich Version "V2" hochgeladen. Neuerungen:
- Values von Objekten auf Interfaces umgestellt und komischen Hack beseitigt
- geringfügig beschleunigt, etwas speicherschonender gemacht... aber noch nicht wirklich gut
- Listen, in "neu"
- Listen-Accessoren: Part, LGet, (Count)
- CSV lesen
- div. Bugfixes
- Neue Funktionen: Flatten, Sqrt, Nrt, itoa, atoi (ex. ToBase, FromBase), Part, Count, LGet, Pwd, Cwd, CsvLoad

Einfache Statisik (Mean, StdDev) kann man damit machen (wenn auch selbst implementieren), kompliziertere Sachen kommen noch.


Downloadlink ist im ersten Beitrag.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 26.01.12 21:00 
Erinnert mich ein bisschen an meinen eigenen Taschenrechner irgendwo im Forum. Interessant das "Konkurrenzprodukt" zu sehen ;)

Was man allenfalls noch machen könnte:

* Für einen Mathematiker ist 2^3^4 eher 2^(3^4) und nicht (2^3)^4. Das machen aber auch gewisse Taschenrechner "falsch". Google macht es jedoch "richtig".
* Bei zirkulären Referenzen stürzt das Programm ab: a:=a, oder a:=b,b:=c,c:=a, dann a anzeigen lassen
* Doppelte Minuszeichen werden nicht unterstützt (1 - -2). Nicht so tragisch, man kann ja klammern.
* Imaginäre Zahlen wären zu mindest bei einem wissenschaftlichen Taschenrechner interessant.

Ich bin mir nicht ganz sicher, ob es dir nur um den Spass ging. Denn wenn du wirklich einfach nur einen Taschenrechner dieser Art brauchst, kannst du dir ja Matlab oder Mathematica besorgen, bzw. Open-Source Varianten die Octave.
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 26.01.12 21:41 
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
Erinnert mich ein bisschen an meinen eigenen Taschenrechner irgendwo im Forum. Interessant das "Konkurrenzprodukt" zu sehen ;)
Hihi, ja, der tyParser war in der allerersten Version auch drin. Hab aber nicht verstanden, ob ich da irgendwie eigene Funktionen rein bekomme. Daher musste was eigenes her :P

user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
* Für einen Mathematiker ist 2^3^4 eher 2^(3^4) und nicht (2^3)^4. Das machen aber auch gewisse Taschenrechner "falsch". Google macht es jedoch "richtig".
Eigentlich hast du Recht. Hast du noch mehr Beispiele was sowas angeht? Der Parser ist durchgehend linksassoziativ, wenn das öfter anders ist müsste ich mal sehen wie ich die Token nach rechts kollabiert bekomme.
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
* Bei zirkulären Referenzen stürzt das Programm ab: a:=a, oder a:=b,b:=c,c:=a, dann a anzeigen lassen
Das ist neu, früher gabs da nur eine Exception-Ausgabe EStackOverflow. Das ist auch noch so, aber dabei ist irgendwo eine Memory Corruption und die führt dann zum Crash. Kann man sowas einfach abfangen, ohne einen Stack-Tiefen-Counter mitzuführen?
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
* Doppelte Minuszeichen werden nicht unterstützt (1 - -2). Nicht so tragisch, man kann ja klammern.
"By Design" ist das neue "not a bug, it's a feature" :P
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
* Imaginäre Zahlen wären zu mindest bei einem wissenschaftlichen Taschenrechner interessant.
Für mich auch. Das ganze Zahlenhandling hab ich bisher recht oft umgestellt, so ganz zufrieden bin ich noch nicht. Das aktuelle System ist schon fast brauchbar, aber noch ein paar Konzepte weit weg von komplexen Zahlen. Vor allem Unterstützung für die ganzen Funktionen wird schwierig, selbst sin/cos/tan verhalten sich in C ja schon etwas seltsam.
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
Ich bin mir nicht ganz sicher, ob es dir nur um den Spass ging. Denn wenn du wirklich einfach nur einen Taschenrechner dieser Art brauchst, kannst du dir ja Matlab oder Mathematica besorgen, bzw. Open-Source Varianten die Octave.
Das lustige ist: hab ich alles, wegen Studium und so ;)
Aber die sind eben nix für "mal schnell was ausrechnen". Bis Matlab offen ist, hab ich den halben Parser programmiert :P Gut, Mathematica ist schneller, aber die Syntax ist wenig Copy/Paste-freundlich - die meisten Leute schreiben eben doch lieber runde Klammern.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 26.01.12 22:04 
Hab recht lange rumprobiert, 2^3^4 war das einzige, was mir aufgefallen ist. Im Prinzip scheint mir da sonst alles in Ordnung :)

EStackOverflow müsste auch nicht unbedingt sein. In meinem Taschenrechner (.) habe ich glaube ich mit Flags oder einer Liste gearbeitet.

Sowas in der Art: Jede Variable, deren Wert ich auflösen muss, markiere ich vor der Auflösung und lösche die Markierung nach der Auflösung wieder. Wenn ich beim Markieren feststelle, dass die Variable bereits markiert war, dann habe ich eine zirkuläre Referenz. Denn dann löse ich ja eine Variable auf, während ich sie auflöse... Da alle Formeln statisch sind und sich während dem Auflösen nicht ändern, muss das in einer Endlosschleife enden... Oder du arbeitest mit einer Liste. Vor jeder Rekursion schreibst du dir auf, welche Variable du gerade versuchst aufzulösen und vor Ende der Rekursion löscht du den Eintrag wieder. Bei einer zirkulären Abhängigkeit hat die Liste doppelte Einträge: a->b->c->a
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Fr 27.01.12 05:49 
Habe jetzt gesehen, dass Du die Konstanten Pi und e schon einfach umgesetzt hast. Wie wäre es mit den anderen Konstanten, die man so benötigt, welche einfach in eine Liste eintragbar sind und dann bei jedem Programmaufruf dann zur Verfügung stehen. Diese Liste könnte man dann auf Abruf anzeigen lassen und sich die Konstante auswählen oder eine neue eingeben ....

Wichtige Konstanten wären m.M. nach c, g, Nl, k, R, Gamma, .... (siehe Tabellenbücher)

Man könnte dann auch griechische Symbole dort als Konstanten einsetzen. Dann kann man die Formeln aus Büchern direkt nachbilden. Auch wäre es sinnvoll, Groß-/Kleinschrift als Unterscheidung zu nehmen, denn in der Physik gibt es t als Symbol für die Zeit und T als Symbol für die Temperatur, oder v = Geschwindigkeit und V = Volumen ....

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.