Autor Beitrag
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: Fr 27.01.12 11:56 
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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)

Siehe die Funktionen const() und constinfo() :zwinker:

ausblenden Ladung eines Aluminium(Al_13)-Kerns in Coulomb
1:
2:
3:
4:
5:
>  e=const('ElectronCharge')
=  1.602 176 46E-19

>  13*e
=  2.082 829 397 999 999 68E-18

(Man beachte auch das umdefinieren von "e" im "Work"-Context. Das wird man mit undef('e') wieder los)

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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 ....
Hm, stimmt. Wäre aber doof, wenn Variablen case-sensitive sind und Funktionsnamen nicht, also müsste ich die auch so machen. Und das wiederum wird etwas unpraktisch :nixweiss:

@user profile icondelfiphan: hab deinen Auflösungs-Stack mal geklaut, funktioniert wunderbar. Beim nächsten mal also drin ;)

EDIT: Beispiel für const()

_________________
"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: Mo 21.05.12 06:19 
Törööö, es gibt mal wieder was neues :)
Das, was ich eigentlich für die V3 vorgesehen hatte ist nicht drin, dafür einige andere Sachen die ich nicht länger zurückhalten will (und die mal jemand testen muss :roll:).

Änderungen:
-wie von user profile icondelfiphan vorgeschlagen werden rekursive Definitionen erkannt
-Stringverarbeitung: #123 wie in Delphi, auch: zahl=123, #zahl; Stringverkettung mit || (Oracle-SQL-Stil)
-Laden von CSV-Dateien in mehrdimensionale Listen
-Ausgeben (mehrdimensionaler) Listen im Logfenster mit table()
-hoffentlich weniger fehleranfälliger Modulus für große Zahlen (ist in bestimmten Fällen immernoch unerkennbar(!) falsch, aber die Grenze ist weiter oben. Alles mit weniger als 18 Stellen sollte jetzt okay sein, danach schlägt die Precision zu)
-Zufallszahlen (uniform) mit random()
-bucket(): Erstellen eines Häufigkeitshistogramms
-Funktionsplots und Listen-Diagramme. Potentiell sehr buggy, aber genau nach Handbuch benutzt sollte alles funktionieren.
-Korrekte Ergebnisse/Fehler für Div. durch Null (+/-Inf oder NaN) und logarithmen negativer Zahlen und 0 (NaN und -Inf)

Wichtig für Programmierer:
Nachdem ich das Problem endlich mal gelöst habe, steht der Code jetzt unter einer Dual-Lizenz, Kurzfassung: "Ohne Erlaubnis gar nichts" für kommerzielle Verwendung, MPL 2.0 für alles andere. Genaueres im Handbuch.

Todo:
-Min/Max auf Listen
-Listen als Syntaxfeature: blubb = {1,2,3}. Kreative Ideen für die Formulierung von Listenzugriff (Elementweise) gesucht! [] sind ja schon weg...
-Mindestparameteranzahl für Funktionen mit dynamischen Parametern, damit Fehler erkannt werden können

Downloadlink im ersten Beitrag ist aktualisiert.



Bonus für die die bis hierhin noch dabei sind:
ausblenden Zum lesen
1:
2:
3:
4:
5:
6:
ndist:= 1/(sqrt(2*pi)*sig) * exp(-0.5*((x-mu)/sig)^2)
stndist:= ndist[mu=0]
rgauss:= sqrt(-2*ln(random())) * sin(2*pi*random())
a = each(range(1,3000,1),x,rgauss)
b = bucket(a, -6,6,23)
show(l(listplot(b,style='bar',color='clRed',size=0.5),plot(stndist[sig=1]*1600,x,l(-3,3))),yrange=l(0,800))

ausblenden Zum Als-ein-Stück-einfügen
1:
ndist:= 1/(sqrt(2*pi)*sig) * exp(-0.5*((x-mu)/sig)^2), stndist:= ndist[mu=0], rgauss:= sqrt(-2*ln(random())) * sin(2*pi*random()), a = each(range(1,3000,1),x,rgauss), b = bucket(a, -6,6,23), show(l(listplot(b,style='bar',color='clRed',size=0.5),plot(stndist[sig=1]*1600,x,l(-3,3))),yrange=l(0,800))					
Zeigt einen Vergleich einer idealen Standardabweichung(Linie) mit den kumulierten Wahrscheinlichkeiten von 3000 Würfen eines Box-Muller-Zufallsgenerators, den ich neulich anderswo verbaut hab. Warum das nicht ohne Rechentricks passt ist mir nicht wirklich klar - rein logisch müsste die 1600 in der letzten Zeile eine 3000 sein. War an der Stelle aber egal, ich brauchte nur einen Generator der ungefähr normalverteilt ist, da hab ich das nicht weiter erforscht ;)

_________________
"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: Sa 20.10.12 00:43 
Hach ja, da ist mir wohl irgendwo die V4 hängen geblieben :roll:
Hier ist sie also, zusammen mit ein paar Ergänzungen, die ich heute noch gebaut hab.

Änderungen:
-AtomicUnit war um Faktor 1E6 zu groß
-Listen (endlich!):
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
> liste = {2,4,6,8,10,12}
= {2, 4, 6, 8, 10, 12}

> liste@3
= 8

> liste@-2
= 10

-min(), max() für Listen
-b(), h(), o(): Kurzformen für Basiskonvertierung, erkennt automatisch ob nach oder von Dezimal konvertiert werden soll
-round(), verhält sich wie Delphi Suche in der Delphi-Reference ROUNDTO
-Bugfixes, sollte jetzt mit XE aufwärts compilieren (und dann auch funktionieren)

Downloadlink wie immer 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."

Für diesen Beitrag haben gedankt: BenBE, FinnO, Mathematiker
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 20.10.12 09:14 
Hallo Martok,
ich habe Dein Programm (endlich) getestet und kann nur sagen: sehr schön. Die Berechnungen funktionieren tadellos.
Natürlich habe ich aber einen Spezialwunsch. Die Gaußsche Normalverteilungsfunktion wäre vordefiniert noch schön. Sie wird doch ab und an benötigt.

Ich wollte für meine persönlichen Zwecke Dein Programm mit einer Funktion zum Abspeichern der Rechnung als Text versehen, scheidere aber an der Komponente TreeNT, die mein altes Delphi 5 nicht mag. Vielleicht könnte ein weiterer kleiner Schalter alle Berechnungen und Ergebnisse als txt speichern oder kopieren.
Außerdem bekomme ich in jeder Quelltextzeile die Meldung: Zeile zu lang (Mehr als 1023 Zeichen), kann also ohnehin nicht compilieren.

Vor einiger Zeit hattest Du geschrieben:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Meinst du, es gibt Leute die ein Handbuch lesen würden? :D

Ja, ich! Und da ist mir aufgefallen, dass mein Internet Explorer 8 die Umlaute Deines HTML-Textes sehr merkwürdig darstellt.
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Ein komplettes CAS fällt da natürlich aus ;)

Schade! Ich suche schon lange jemanden, der ein CAS in Delphi umsetzt. :wink:

Unabhängig von meinen kleinen "Meckereien" kann ich nur sagen: Pi gefällt mir. :zustimm:
Wenn es kein Geheimnis ist: Könntest Du verraten, wieso das Programm "Pi" heißt? Ich bin immer davon fasziniert, welche Beweggründe zur Namensgebung eines Programms führen.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
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: Sa 20.10.12 19:20 
Moin!

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Ich wollte für meine persönlichen Zwecke Dein Programm mit einer Funktion zum Abspeichern der Rechnung als Text versehen, scheidere aber an der Komponente TreeNT, die mein altes Delphi 5 nicht mag.
Aber die richtige Version hast du? Es gibt eine für D3-5 und eine für D6 aufwärts.
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem bekomme ich in jeder Quelltextzeile die Meldung: Zeile zu lang (Mehr als 1023 Zeichen), kann also ohnehin nicht compilieren.:
Git richtig installiert? Ich glaube, die Fehlermeldung kommt, wenn die Dateien nur LF als Dateiende verwenden statt CRLF. Im Notfall alle in einem Texteditor öffnen und neu speichern.


user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Meinst du, es gibt Leute die ein Handbuch lesen würden? :D
Ja, ich! Und da ist mir aufgefallen, dass mein Internet Explorer 8 die Umlaute Deines HTML-Textes sehr merkwürdig darstellt.
Ja, der IE ignoriert die Zeichensatzangabe für UTF-8 im XML-Kopf. Ich hab mal ein <meta> ergänzt.

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht könnte ein weiterer kleiner Schalter alle Berechnungen und Ergebnisse als txt speichern oder kopieren.
Also kopieren kannt du schon, das ist ein normales RichEdit. Kommt also ganz gewöhnliches RTF raus.
Wobei du damit wieder das ansprichst, was mich am Meisten stört... die Ein/Ausgabe. Allein, dass das zwei Controls sind (man also hin und her tabben kann) ist schon doof - das haben CASse schon richtig. Ich hab da immer mal mit Protected im RichEdit oder auch HTMLViewer experimentiert, aber so richtig zufriedenstellend war das alles nicht. Im Richedit ist auch die Eingabe-History etwas schwierig einzubinden. Mit Pfeiltasten geht grad noch, aber ein Dropdown ist da echt ein Problem.
Müsste man also eigentlich ein eigenes Control schreiben (da könnte man dann auch z.B. Diagramme als eingebettete Controls realisieren, das wäre dann gleich interaktiv), aber dafür dann Textselektion und sowas zu bauen... ne, das wollte ich mir noch nicht antun.
Wenn du natürlich mal Langeweile hast.... :P :zwinker:


user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Die Gaußsche Normalverteilungsfunktion wäre vordefiniert noch schön. Sie wird doch ab und an benötigt.
Als verteilter Zufall (dann wäre mindestens Poisson auch mal noch wichtig) oder als Statistik auf Listen (also Stddev)? Letzteres ist nämlich einfach in Pi selbst programmiert, aber da ich "Lade Skript aus Datei" bis heute nicht von der Todo-Liste abgearbeitet hab, muss man sich den Ausdruck merken ;)

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Wenn es kein Geheimnis ist: Könntest Du verraten, wieso das Programm "Pi" heißt? Ich bin immer davon fasziniert, welche Beweggründe zur Namensgebung eines Programms führen.
Eine sehr gute Frage :zustimm:

Ich glaube, einen richtigen "Grund" gabs da gar nicht. Ich hatte etwas gesucht, was ich auf's Icon malen könnte. Und irgendwie ist pi ja schon das erste Symbol, was einem so zu Mathematik einfällt. Hat vielleicht auch damit zu tun, dass es die erste vordefinierte Konstante war :gruebel:.

Übrigens, wer das mal braucht, hab die Behandlung grade im Divisions-Code wiedergefunden: \Infty = 1/0, \NegInfty = -1/0, NAN = 0/0

_________________
"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."

Für diesen Beitrag haben gedankt: BenBE, Mathematiker
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 20.10.12 19:54 
Hallo Martok,
vielen Dank für die Hinweise.
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Aber die richtige Version hast du? Es gibt eine für D3-5 und eine für D6 aufwärts.

Natürlich hatte ich die falsche. Jetzt funktoniert es.
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab mal ein <meta> ergänzt.

Wunderbar. Das Handbuch wird jetzt im Internet Explorer korrekt angezeigt.
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Müsste man also eigentlich ein eigenes Control schreiben (da könnte man dann auch z.B. Diagramme als eingebettete Controls realisieren, das wäre dann gleich interaktiv), aber dafür dann Textselektion und sowas zu bauen... ne, das wollte ich mir noch nicht antun.
Wenn du natürlich mal Langeweile hast.... :P :zwinker:

Langeweile habe ich selten, aber was wichtiger ist, ich wüsste gar nicht, wie ich das anstellen soll. Es wird wohl nichts werden. :nixweiss:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
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 24.10.12 01:26 
Hi,

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Natürlich hatte ich die falsche. Jetzt funktoniert es.
Kaum macht man's richtig, schon gehts :zustimm:

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Langeweile habe ich selten, aber was wichtiger ist, ich wüsste gar nicht, wie ich das anstellen soll. Es wird wohl nichts werden. :nixweiss:
Och schade ;)
Was aber wirklich mal interessant (und weit weniger speziell) wäre: das Graphing-Zeugs "in schön". Ich hab da im Git schonmal etwas umgeräumt, aber die Skalierung z.B. haut ja noch nicht so wirklich stabil hin. Ich brauch das grade selber öfter, da ist mir das aufgefallen wie schlecht das eigentlich alles ist ;) Zoomen können wäre wirklich schön, aber so wird das nix.
ListPlots (die eigentlich eher XYPlots sind) sollte man vielleicht auch von Histogrammen trennen. Das würde ein paar Sachen erleichtern...

Vorschläge nehm ich da gerne entgegen. Gerne auch in Codeform :zwinker:

Grüße,

_________________
"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."
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 24.10.12 16:43 
Hallo Martok,
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
... das Graphing-Zeugs "in schön". Ich hab da im Git schonmal etwas umgeräumt, aber die Skalierung z.B. haut ja noch nicht so wirklich stabil hin. ... Zoomen können wäre wirklich schön, aber so wird das nix.

Bisher habe ich in "Pi" nur die Grafik für die Funktionen getestet. Sieht doch ganz gut aus. :)

Ich werde unter Open Source Projekte ein kleines Programm mit spezieller Unit veröffentlichen, mit der man schnell und einfach mathematische Standardfunktionen zeichnen kann, auch mit Zoom des Darstellungsintervalls und ein paar anderen Möglichkeiten.
Ich vermute, dass dies Dir nicht helfen wird, aber vielleicht nützt es anderen.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Martok
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: Sa 03.11.12 20:48 
Mit tatkräftigerideengebender Hilfe von user profile iconFinnO und einem "joar, den Vorschlag hatte ich auch schon getippt und dann wieder aus dem Chat gelöscht" von user profile iconHidden gibt's jetzt schöne Diagramme, und damit eine neue Version. In den dazugekommenen Features ist eindeutig eine Tendenz, was daran liegt, dass ich aktuell Pi zur Auswertung der Messergebnisse für meine BA verwende.

Änderungen:

  • Zeichensatz der documentation.html nochmal für den IE im <head> angegeben
  • Round mit nur einem Parameter rundet auf ganze Zahlen
  • Skripte zeilenweise ausführen mit Source(dateiname)
    Falls das notwendig ist, wird die Erweiterung '.pi' automatisch angehangen; der angegebene Name hat aber immer Vorrang.
    Kommentare mit ';' einleiten(wie ini-Dateien)
  • CSVLoad gefixt, skip-Angaben>1 funktionieren jetzt
  • SortBy(list,element,komparator) sortiert list nach den werten, die der komparator zurückgibt (siehe Beispiel in der Doku)
  • NumDerive(list), "Ableitung" der (X,Y)-Liste nach Differenzenmethode, nimmt linearen Verlauf zwischen 2 Punkten an und legt den abgeleiteten Punkt in die Mitte zwischen 2 X-Werte
  • ListAccess(@-Operator) bindet jetzt stark, d.h. list@3+1 tut jetzt das, was man denkt: Addition(ListAccess(list,3),1)
  • Flatten() umbenannt in Hold() (expandiert nach wie vor eine Range in ein FixedList)
  • neue Funktion Flatten(), tut jetzt das was sie in Mathematica tut (eine Ebene Listen auspacken)
  • {} ist jetzt kein Syntaxfehler mehr, sondern eine leere Liste


Neu: ordentliche Diagramme!

  • show()'s erster Parameter kann auch ein einzelnes <Plot>-Objekt sein (mehrere nach wie vor per Liste)
  • listplot() gibt es nicht mehr, die Funktionalität wurde aufgeteilt in:
  • histogram(list) zeichnet ein Histogramm/Bargraph mit Balken zentriert auf den X-Werten
  • xyplot(list) zeichnet alles was man sonst aus x-y-Paaren machen kann
  • Diagrammfenster haben jetzt ein Kontextmenü, in dem die Darstellung verändert werden kann
  • direktes Kopieren der Ansicht als EMF
  • Plot-Objekte haben eine neue Option Caption für die Diagrammlegende
  • Diagramme können per "Rechteck aufziehen" gezoomt werden

Beispielgraph (png, 44.53 KB)
sineder

Was an dem zu beachten ist: der blaue Sinus stammt aus einer Funktion, die Ableitungen Cos und -Sin sind per numderive aus einer Wertetabelle erzeugt worden. Bei -Sin sieht man auch schön, wie das mit den Ableitungen läuft: vor dem ersten Schritt sind einfach keine Daten vorhanden ;). Der absolute Fehler der 2. Ableitung gegen die Funktion -sin(x) ist übrigens irgendwo in der Größenordnung von 1E-4.


Downloadlink wie immer im ersten Beitrag.


PS: 111 Commits im Repository :D
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."

Für diesen Beitrag haben gedankt: FinnO
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 11.11.12 19:39 
Wie bereits öfter angedroht, hab ich mich mal hingesetzt und eine kurze Dokumentation zum Codeaufbau geschrieben.
Das ganze findet sich hier, ich werde den Link auch im ersten Beitrag noch ergänzen.

Ich hoffe mal, ich hab nicht allzu viel vergessen ;-)

_________________
"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."

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 11.11.12 20:47 
Hallo Martok,
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Wie bereits öfter angedroht, hab ich mich mal hingesetzt und eine kurze Dokumentation zum Codeaufbau geschrieben.

Danke. Ich habe intensiv Deinen Text gelesen und kann nur staunen. Ich verstehe nämlich überhaupt nichts. :nixweiss: Z.B.
Zitat:
Implementiert ist das ganze über Interfaces, um Referenzzählung zu bekommen. Dieses Interface wird dann von Klassen implementiert, die in der Konstante Expressions definiert sind.

Du musst mir das aber hier nicht erklären. Es wäre verlorene Mühe. Bis ich soweit bin, dass zu verstehen, dauert es noch sehr sehr lange.
Was macht das Termzusammenfassen? :wink: Ich habe gepasst.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
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 11.11.12 20:53 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Implementiert ist das ganze über Interfaces, um Referenzzählung zu bekommen. Dieses Interface wird dann von Klassen implementiert, die in der Konstante Expressions definiert sind.

Du musst mir das aber hier nicht erklären.
Das verstehst du, wenn du meinen aus Zeitmangel unveröffentlichten Artikel über Interfaces gelesen hast... :oops:

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Was macht das Termzusammenfassen? :wink: Ich habe gepasst.
Ich baue grade noch Panning für die Diagramme. Für den Rest warte ich auf user profile iconjaenicke :P

_________________
"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."
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 11.11.12 21:26 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Das verstehst du, wenn du meinen aus Zeitmangel unveröffentlichten Artikel über Interfaces gelesen hast...


Also... wenigstens in Auszügen verstehst du das dann :)

LG!
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 13.02.13 21:22 
Ich darf Verkünden: es ist nix passiert :lol:
Doch, eins: Github hat die Downloads abgeschafft, das heißt: die aktuellste Binary gibts jeweils nur noch im ersten Beitrag als Anhang. Schade.

Als "Zwischenstand" gibt's jetzt die Version 6, mit folgenden Änderungen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
add: Panning in Graphs, fix some UI stuff
add: graph tool 'read value'
add: Step(), Sign()
chg: replace TreeNT with standard TTreeView
add: directly save EMF from Graph display
add: GCD(), LCM(), Fraction()
fix: extreme zoom in graphs
add: basic statistics with Gaussians (Package Statistics)

Für Details verweise ich auf die Dokumentation.

Was ich als nächstes mache, ist noch nicht klar. Eventuell passiert hier auch noch länger nix, aber dieses Release war erstmal überfällig.

_________________
"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: Sa 29.06.13 00:00 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Was ich als nächstes mache, ist noch nicht klar. Eventuell passiert hier auch noch länger nix, aber dieses Release war erstmal überfällig.
Ich bin ziemlich gut darin, (In-)Aktivität vorherzusagen :rofl:

In den letzten 2 Wochen habe ich mich damit befasst, die komplette innere Struktur neu zu entwickeln. Da das ja mindestens doppelt so gut werden sollte, passiert das ganze in einem Entwicklungszweig namens "tau", und einiges hat sich da schon getan.
Relativ offensichtlich am Anfang ist eine striktere Trennung des Rechenkernels von der Oberfläche und von seinen Funtionspackages. Das macht es einfacher, den Kernel (ich suche übrigens noch einen schönen Codenamen, sowas haben die doch alle :lol:) in anderen Projekten zu verwenden. Unter Anderem gibt es jetzt eine Kommandozeilenversion tau.exe (logischerweise ohne die Graphing-Funktionen), die allerdings eher zum Testen des neuen Codes diente und vermutlich nicht wirklich weiterentwickelt werden wird. Wird sich zeigen.

Wichtiger ist allerdings die erwähnte neue Struktur, die (unter Verwendung von Dingen die ich in den letzten Jahren beim Lesen diverser Paper und Blogbeiträge der Entwickler von MuPAD und Mathematica gelernt habe) jetzt komplett auf einer möglichst geringen Anzahl verschiedener Elemente basiert. So gibt es jetzt nur noch 4 Typen von Expressions (genannt Primitiven):
  • Werte (auch Listen sind Werte)
  • symbolische Referenzen
  • Funktionsaufrufe
  • Subkontextaufrufe

Sämtliche Operatoren werden über Zuordnungstabellen auf Funktionen abgebildet. So ist z.b. der Ausdruck 1+2+3+4 identisch zu _plus(1,2,3,4). Diverse Optionen stellen dabei sicher, dass nur sinnvolle Aufrufe gebildet werden können. Dies passiert direkt beim Parsen der Ausdrücke nach der Zerlegung in Tokens (der einzige Teil, der gleich geblieben ist), so dass danach der komplette Ausdruck in einen Baum von diesen 4 Primitiven überführt ist oder eventuelle Fehler bereits erkannt wurden.

Da jetzt symbolische Referenzen ein echtes Ausdruckselement sind, ist es auch einfacher, symbolische Aktionen zu entwickeln (nun ja, wie "einfach" das halt sein kann) und bei der Gelegenheit ist auch die Unterscheidung zwischen := / _define() und = / _assign() nachvollziehbarer geworden. Zusammen mit hold() bedeutet das, dass jetzt Ausdrücke an sich transportiert werden können, ohne eine ungewollte Auswertung zu "riskieren".

Auch neu (bzw. aktuell Work-in-Progress) ist (realisiert über einen Datentyp für das Primitive Objekt "Wert", so wie String oder Liste auch) das Rechnen mit phyiskalischen Einheiten/Dimensionen (Hände hoch: wer hier weiß, auf welch' abenteuerliche Art das °C definiert ist?). Noch funktioniert das nur sehr rudimentär und die komplette Algebra ignoriert Einheiten vollständig, allerdings sollten zumindest die Grundrechenarten recht einfach brauchbar umsetzbar sein. Auch Konstanten können dann in ihren echten Einheiten definiert werden (Elementarladung = 1.602e-19 C) bzw. werden direkt überflüssig (Lichtjahr, Parsec...).

Neu auf der TODO-Liste ist eine sinnvollere Dokumentation der Funktionen, am Besten in einem standardisierten Format im Quellcode selbst. PasDoc ist hier der offensichtliche Ansatz, ist allerdings nur schwierig anpassbar. Wird also wohl auf eine Eigenentwicklung hinauslaufen. Eine Einbindung in das Programm (Code Hint) wäre natürlich optimal, allerdings habe ich noch keine Ahnung wie ;-)

Binaries vom aktuellen Stand gibt es erstmal nur im Anhang dieses Beitrags (oder zum selbstcompilieren im Git, es werden keine Extrakomponenten mehr benötigt), da das Ganze kein Release ist sondern ich nur auf ein wenig Feedback hoffe. Die Dokumentation ist nicht aktuell, allerdings sollte sich nicht viel geändert haben. Auch das ist Teil des Tests :roll: Undokumentiere Funktionen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
clone(expr)
  erzeugt eine Kopie der Expression
subs(expr, {var:=newexpr,var2=newVal})
  wendet die Definitionen(Zuweisungen) in der Liste auf expr an. expr wird evaluiert, also ggf. in hold() verpacken
unit(value,'unitspec')
  erzeugt eine Zahl mit Dimension
convert(unitval, 'unitspec')
  rechnet eine Zahl von einer Einheit in eine andere um, sofern das möglich ist


Oh und: am 9.7. wird Pi 2 Jahre alt :party:
Wer also vorher noch das "Ich war dabei"-Zertifikat haben will: Patches, GitHub-Pull-Requests oder auch Blobs of Code sind immer gern gesehen und werden passend vercredited ;-)

[/WallOfText]
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."
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: Fr 16.08.13 06:52 
Moin!

Es ist mal wieder soweit, die "Periode Größerer Aktivität" neigt sich dem Ende zu, es gibt also ein Release ;)

Was sich intern getan hat, steht im Beitrag hier drüber. Die Kommandozeilenversion liefere ich tatsächlich mit aus, aber wirlich gefplegt würde ich die nicht nennen. Ist auch nicht dokumentiert, verhält sich aber nicht weiter unerwartet für jemand der vor 20 Jahren schon Computer hatte :lol:

Das mit den Namen ist jetzt so: der Kernel heißt Tau, die GUI heißt weiterhin Pi. Minimale Umgewöhnung und so :P Genau deswegen hab ich mich auch gegen die Versionsnummer Tau entschieden und so folgt auf V6 tatsächlich ganz gewöhnlich V7. Solche Spielereien rächen sich spätestens nach 5-6 Versionen, TeX demonstriert das ja sehr schön.

Dinge, die sonst noch so passiert sind:
- Massive Beschleunigung von Funktionsaufrufen, merkt man gerade bei Diagrammen
- Binomialkoeffizient (n über k) und Anzahl geordneter Permutationen n Pk
- Einheitenhandling (das meines Wissens besser ist als alles was große CASse ab Werk bieten, Mathematica9 kommt über das WolframAlpha-Interface ran, aber das wars auch :roll: )
- Timing: AbsoluteTime
- Trunc, Ceil, Floor
- Anfänge von symbolischer Manipulation: Subst
- Erweiterung der Selbsttests
- Fixes rund um fiese Eingeschaften von Extended

Als bessere Todo-Liste verwende ich jetzt die Github-Issues (Link auch im ersten Beitrag), wer mag, kann da gerne Dinge reinwerfen. Da kann man auch Pull-Requests anhängen :P

Der Hacking Guide ist noch nicht aktualisiert, der neue Code sollte sich allerdings wesentlich einfacher lesen lassen. Er ist jedenfalls kürzer - im Endeffekt ist sogar die Binary 40kb kleiner geworden, obwohl sie jetzt viel mehr kann. Mal sehen wann ich das mache - hat feedbackbedingt eher geringe Priorität.


Downloads im ersten Beitrag.

Oh und: There May Be Bugs ;)

_________________
"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: Do 17.10.13 16:31 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Der Hacking Guide ist noch nicht aktualisiert, der neue Code sollte sich allerdings wesentlich einfacher lesen lassen.
Bin grade dabei. Ist grade in einem etwas seltsamen Zustand des "nicht-ganz-richtig-seins", aber die Struktur stimmt schon wieder.
Ich wär euch sehr verbunden, wenn ihr mal so in den Raum werft, wo die größten Fragezeichen auf der Stirn erscheinen. Packages ist soweit klar, aber das ist jetzt auch etwas einfacher geworden.

_________________
"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 06.07.14 21:12 
Es gibt mal wieder was Neues:

  • diverse Bugfixes
  • Neue Funktion: ND(), numerische Ableitung da/db auf Datentupeln {a,b)}
  • Grundlagen symbolischer Manipulation: Match, Pattern, Rule, Replace (verhalten sich eher wie MuPAD, weniger wie Mathematica)
  • Source() kann auch ganze Skripte laden; Ausdruckstrenner ist § (das sieht weniger komisch aus als es klingt ;-) )
  • Schon wieder Änderungen and Hold() und Eval(), jetzt machts wirklich Sinn
  • Neue Funktion: Splice(), Zusammenführen von 2 Listen zu Tupeln
  • Neue Funktion: Glob(), Dateilistings einsammeln
  • UI-Änderung: Diagramme in Pi landen jetzt in Tabs, können aber undocked werden
  • UI-Änderung: das Ausdrucks-Eingabecontrol ist jetzt (automatisch) mehrzeilig und hat eine bessere History-Ansicht
  • Mehr Einheiten, u.a. dyn, lbf, Bits/Bytes und binäre Prefixe (ki-, Mi- etc.) und Angström


Außerdem ein massiver Rewrite des Ausdrucksbaums; Operatoren sind jetzt Aliase für Funktionen. Das macht sehr vieles intern einfacher. Wer sehen will, was das genau bedeutet bekommt von ?() und ??() jetzt dazu passende ExpressionTree-Infos.
Auch das Einheiten/Datentypen-Handling ist neu. Zahlen sind nicht mehr immer Extended sondern können auch Int64 sein (und bleiben das auch, wenn die Funktion das beachtet). Das macht bestimmte ganzzahlarithmetische Dinge wesentlich einfacher.

Neuer Download ist im ersten Beitrag. Neuer Screenshot auch, wer mir sagen kann was ich dort berechne kriegt einen Keks (Selbstabholer) :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."

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 06.07.14 21:47 
Hallo,
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
... wer mir sagen kann was ich dort berechne kriegt einen Keks (Selbstabholer) :zwinker:

Zuerst den Umfang der Erdbahn (Astronomische Einheit * 2pi) und anschließend die mittlere Bahngeschwindigkeit der Erde auf Ihrer Umlaufbahn.
Wo ist mein Keks? :lol:

Beste Grüße
Mathematiker

Nachtrag: Diff funktioniert irgendwie nicht. Ich bekomme die Meldung
Zitat:
EFOpenError: Datei ...\rules_diff.pi kann nicht geöffnet werden. Das System kann die angegebene Datei nicht finden

Was mache ich falsch?
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 06.07.14 23:25 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Zuerst den Umfang der Erdbahn (Astronomische Einheit * 2pi) und anschließend die mittlere Bahngeschwindigkeit der Erde auf Ihrer Umlaufbahn.
Korrekt :zustimm:
Wobei ich mir nicht sicher bin, ob da ein julianisches Jahr richtig war. War es?

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Wo ist mein Keks? :lol:
Komm halt vorbei und hol ihn dir :D Alternativ hätten wir hier auch einen user profile iconTeekeks :mrgreen:

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Nachtrag: Diff funktioniert irgendwie nicht. Was mache ich falsch?
Nix, die Datei fehlt im Archiv. Das funktioniert eh nicht wirklich :roll:
Prinzipiell findest du die hier, aber der Patternmatcher kann noch keine Constraints (einer der Gründe warum dieses Release so lange rumlag; hatte es jetzt dach gemacht, da der Rest schon ganz nett ist), das wird also nicht laufen.

_________________
"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."