Unit Mathe

Zur Vorstellung von Komponenten und Units für Lazarus
Antworten
heizkoerper
Beiträge: 24
Registriert: Mo 1. Aug 2011, 14:39
OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
CPU-Target: 32 und 64 Bit
Wohnort: Hannover
Kontaktdaten:

Unit Mathe

Beitrag von heizkoerper »

Hallo Mathe-Fans, :mrgreen:

hoffentlich gibt es die auch.

In vielen Jahren habe ich eine Formelsammlung erstellt.

Diese möchte ich zur Verfügung stellen.

Viel Erfolg bei der Anwendung.

Gruß Heizkoerper
Mathe.pas
(23.73 KiB) 170-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Unit Mathe

Beitrag von af0815 »

heizkoerper hat geschrieben:In vielen Jahren habe ich eine Formelsammlung erstellt.
Diese möchte ich zur Verfügung stellen.

Um hier gleich mal die Frage zu stellen -> Welche Lizenz ? LGPL ?! Ohne Lizenz, ist die Sammlung für andere Personen oft wertlos, weil man nicht sicher ist, wie man die Routinen einsetzen darf.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Unit Mathe

Beitrag von indianer-frank »

Unabhängig von der fehlenden Lizenz, ist auch aus inhaltlichen Gründen von der Unit abzuraten.

1. Es wird zwar extended gerechnet, die Ergebnisse erreichen aber selten Extended-Genauigkeit. Dann wird der völlig legale Wert ErgebnisFehler=1E2200 als Fehlerindikator benutzt! Der Wert is noch viel viel kleiner als die Wurzel der größten Extendedzahl! Warum nicht INF oder NAN???

2. Völlig willkürlich Rangebeschränkungen:
a) Fehler in FCPas für FresnelC(123) = 0.50258788525009001821
b) Fehler in LiPas für Li(64) = 21.934668328050995189
c) Fehler in CihPas für Chi(123) = 0.10736460288318749037e52
usw
usw

3. Weitgehende Mißachtung der Erkenntnisse der letzen 50 Jahre zu Rundungsfehler etc. ZB wird die alte Formelsammlungsdefinition benutzt für sinh(x) = (Exp(x)-Exp(-x))/2 . Mathematische ist sinh(x) = x + x^3/6 +.. also sinh(x) >= x für kleine x. Was liefert die Funktion?

sinh(1e-15)=9.99986768737692877E-0016

Also sinh(x) < x! Außerdem ist der relative Fehler zum Ergebnis 1.00000000000000E-0015 mehr als 1.3E-5 und das bei einer Extended-Genauigkeit von 1.1E-19! Und wie befürchtet, ist sinh(x) = 0 statt sinh(x) = x für abs(x) <= 1e-20.

Fazit: Wenn eine genaue, vollständige, freie Opensource-Bibliothek für Pascal gebraucht wird, die die Extended-Genauigkeit wirklich erreicht, gibt es zZ nur die AMath-Bibliothek:
-> http://home.netsurf.de/wolfgang.ehrhardt/misc_de.html#amath

Für die, die mit Double zufrieden sind, kann man noch TPMath empfehlen:
-> http://www.unilim.fr/pages_perso/jean.debord/tpmath/tpmath.htm

Die ausführliche (leider nur englische) Einführung und Funktionsliste von AMath kann man auch online einsehen:
-> http://home.netsurf.de/wolfgang.ehrhardt/amath_functions.html

Gruß Frank

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Unit Mathe

Beitrag von marcov »

indianer-frank hat geschrieben:Fazit: Wenn eine genaue, vollständige, freie Opensource-Bibliothek für Pascal gebraucht wird, die die Extended-Genauigkeit wirklich erreicht, gibt es zZ nur die AMath-Bibliothek:
-> http://home.netsurf.de/wolfgang.ehrhardt/misc_de.html#amath


Dann muss ich deine Bugreports für Numlib vermisst haben :-)

heizkoerper
Beiträge: 24
Registriert: Mo 1. Aug 2011, 14:39
OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
CPU-Target: 32 und 64 Bit
Wohnort: Hannover
Kontaktdaten:

Re: Unit Mathe

Beitrag von heizkoerper »

af0815 hat geschrieben:
heizkoerper hat geschrieben:In vielen Jahren habe ich eine Formelsammlung erstellt.
Diese möchte ich zur Verfügung stellen.

Um hier gleich mal die Frage zu stellen -> Welche Lizenz ? LGPL ?! Ohne Lizenz, ist die Sammlung für andere Personen oft wertlos, weil man nicht sicher ist, wie man die Routinen einsetzen darf.


Die Routinen habe ich alle selber entwickelt. Es gibt also keine Lizenzprobleme.

heizkoerper
Beiträge: 24
Registriert: Mo 1. Aug 2011, 14:39
OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
CPU-Target: 32 und 64 Bit
Wohnort: Hannover
Kontaktdaten:

Re: Unit Mathe

Beitrag von heizkoerper »

indianer-frank hat geschrieben:Unabhängig von der fehlenden Lizenz, ist auch aus inhaltlichen Gründen von der Unit abzuraten.

1. Es wird zwar extended gerechnet, die Ergebnisse erreichen aber selten Extended-Genauigkeit. Dann wird der völlig legale Wert ErgebnisFehler=1E2200 als Fehlerindikator benutzt! Der Wert is noch viel viel kleiner als die Wurzel der größten Extendedzahl! Warum nicht INF oder NAN???

2. Völlig willkürlich Rangebeschränkungen:
a) Fehler in FCPas für FresnelC(123) = 0.50258788525009001821
b) Fehler in LiPas für Li(64) = 21.934668328050995189
c) Fehler in CihPas für Chi(123) = 0.10736460288318749037e52
usw
usw

3. Weitgehende Mißachtung der Erkenntnisse der letzen 50 Jahre zu Rundungsfehler etc. ZB wird die alte Formelsammlungsdefinition benutzt für sinh(x) = (Exp(x)-Exp(-x))/2 . Mathematische ist sinh(x) = x + x^3/6 +.. also sinh(x) >= x für kleine x. Was liefert die Funktion?

sinh(1e-15)=9.99986768737692877E-0016

Also sinh(x) < x! Außerdem ist der relative Fehler zum Ergebnis 1.00000000000000E-0015 mehr als 1.3E-5 und das bei einer Extended-Genauigkeit von 1.1E-19! Und wie befürchtet, ist sinh(x) = 0 statt sinh(x) = x für abs(x) <= 1e-20.

Fazit: Wenn eine genaue, vollständige, freie Opensource-Bibliothek für Pascal gebraucht wird, die die Extended-Genauigkeit wirklich erreicht, gibt es zZ nur die AMath-Bibliothek:
-> http://home.netsurf.de/wolfgang.ehrhardt/misc_de.html#amath

Für die, die mit Double zufrieden sind, kann man noch TPMath empfehlen:
-> http://www.unilim.fr/pages_perso/jean.debord/tpmath/tpmath.htm

Die ausführliche (leider nur englische) Einführung und Funktionsliste von AMath kann man auch online einsehen:
-> http://home.netsurf.de/wolfgang.ehrhardt/amath_functions.html

Gruß Frank



Hallo Frank,

vielen Dank für die konstruktive Kritik und die interessanten Links.

Die Routinen habe ich alle selber entwickelt, Lizenzprobleme dürfte es also nicht geben.

Ich hatte nie vor, bei allen Funktionen eine extrem hohe Genauigkeit zu erhalten.

Die Algorithmen habe ich versucht so einfach wie möglich zu schreiben. Jeder kann sie sich seinen Bedürfnissen anpassen.

Die Routinen sind ein Abfallprodukt beim Entwickeln eines Formelcompilers.

Vor vielen Jahren als die Rechner noch viel langsamer waren, habe ich in einem interessanten Buch (Coprozessoren Programmierung mit Turbo Pascal und C++) einen Formelcompiler entdeckt, welcher die Routinen direkt in 387-Maschinencode umsetzt und ausführt.

Dieser Compiler ist natürlich sehr schnell. Ich habe ihn auch für 32bit-Programme wie Delphi weiterentwickelt.

Dieser Compiler arbeitet nur mit Extended-Zahlen, weil diese direkt vom Coprozessor ausgeführt werden.

Bei den heutigen schnellen Rechnern ist Maschinenspracheinsatz kaum noch nötig. Außerdem ist man hardwareabhängig.

Also habe ich den Formelcompiler wieder hardwareunabhängig gemacht. Er rechnet aber trotzdem mit Extended-Zahlen. Deswegen ergeben auch alle Funktionen ein Extended-Ergebnis, auch bei denen, welche nur ein boolesches- oder ShortInt-Ergebnis haben.

Die Hyperbelfunktionen werde ich wohl als Reihe entwickeln.

Viele Grüße

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Unit Mathe

Beitrag von indianer-frank »

marcov hat geschrieben:
indianer-frank hat geschrieben:Fazit: Wenn eine genaue, vollständige, freie Opensource-Bibliothek für Pascal gebraucht wird, die die Extended-Genauigkeit wirklich erreicht, gibt es zZ nur die AMath-Bibliothek:
-> http://home.netsurf.de/wolfgang.ehrhardt/misc_de.html#amath


Dann muss ich deine Bugreports für Numlib vermisst haben :-)

Du meinst die optimale FPC Numlib? Ein paar kurze Bemerkungen dazu beschränkt auf Elementare und Spezielle Funktionen:

Erstens werden Math-Funktionen noch mal geliefert, allerdings unter sehr phantasievollen Namen: zB speach für arccosh usw.

Zweitens ist extended precision zwar möglich (bei mir ist macheps=1.0842021724855044E-0019, giant=9.9918856055392512E+4931), Range und Genauigkeit werden aber nicht voll ausgenutzt. Beispiele:

spegam(200) = Gamma(200) crasht, obwohl Gamma(200)= 0.39432893368239525178e373 verschwindet klein ist im Vergleich zu giant.

speefc(20) = 5.3958656116078825E-0176 hat eine relativen Fehler von 31473 macheps im Vergleich zu erfc(20) = 0.53958656116079009289e-175; und speefc(30) liefert gar 0 statt 0.25646562037561116000e-392.

Drittens: Die Numlib-Funktionen sind ein echter Fortschritt zu Math, allerdings fragt man sich dann doch, warum Otto-Normal-FPC-User die ungenauen Math-Routinen im wesentlichen als Default untergejubelt erhält: Warum habt Ihr nicht diese Funktionen in Math eingebaut?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Unit Mathe

Beitrag von pluto »

Warum habt Ihr nicht diese Funktionen in Math eingebaut?

Es wird bestimmt Gründe geben. Vielleicht reicht den Normalen Benutzer eine einfache Mathe Unit. Aber selbst ich stoße langsam an die Grenzen von den Datentypen. Selbst wenn ich auf int64 umsteigen würde, würde ich das "Problem" nur verschieben.
MFG
Michael Springwald

rds
Beiträge: 17
Registriert: Di 4. Nov 2014, 18:32

Re: Unit Mathe

Beitrag von rds »

indianer-frank hat geschrieben:Unabhängig von der fehlenden Lizenz, ist auch aus inhaltlichen Gründen von der Unit abzuraten.

1. Es wird zwar extended gerechnet, die Ergebnisse erreichen aber selten Extended-Genauigkeit. Dann wird der völlig legale Wert ErgebnisFehler=1E2200 als Fehlerindikator benutzt! Der Wert is noch viel viel kleiner als die Wurzel der größten Extendedzahl! Warum nicht INF oder NAN???

2. Völlig willkürlich Rangebeschränkungen:
a) Fehler in FCPas für FresnelC(123) = 0.50258788525009001821
b) Fehler in LiPas für Li(64) = 21.934668328050995189
c) Fehler in CihPas für Chi(123) = 0.10736460288318749037e52
usw
usw

3. Weitgehende Mißachtung der Erkenntnisse der letzen 50 Jahre zu Rundungsfehler etc. ZB wird die alte Formelsammlungsdefinition benutzt für sinh(x) = (Exp(x)-Exp(-x))/2 . Mathematische ist sinh(x) = x + x^3/6 +.. also sinh(x) >= x für kleine x. Was liefert die Funktion?

sinh(1e-15)=9.99986768737692877E-0016

Also sinh(x) < x! Außerdem ist der relative Fehler zum Ergebnis 1.00000000000000E-0015 mehr als 1.3E-5 und das bei einer Extended-Genauigkeit von 1.1E-19! Und wie befürchtet, ist sinh(x) = 0 statt sinh(x) = x für abs(x) <= 1e-20.

Fazit: Wenn eine genaue, vollständige, freie Opensource-Bibliothek für Pascal gebraucht wird, die die Extended-Genauigkeit wirklich erreicht, gibt es zZ nur die AMath-Bibliothek:
-> http://home.netsurf.de/wolfgang.ehrhardt/misc_de.html#amath

Für die, die mit Double zufrieden sind, kann man noch TPMath empfehlen:
-> http://www.unilim.fr/pages_perso/jean.debord/tpmath/tpmath.htm

Die ausführliche (leider nur englische) Einführung und Funktionsliste von AMath kann man auch online einsehen:
-> http://home.netsurf.de/wolfgang.ehrhardt/amath_functions.html

Gruß Frank


Leider ist die angegebnene Seite "http://home.netsurf.de/wolfgang.ehrhardt/misc_de.html#amath" nicht erreichbar :x

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Unit Mathe

Beitrag von wp_xyz »

Das Internet vergisst nichts: http://www.archive.org/web/web.php - hier ist eine Kopie der Seite vom 2.Jan 2011 gespeichert

Antworten