Inhalt: Einige Implementierungsdetails der mathematischen Routinen.
        Nur fr Interessierte.


Art der Berechnung
==================
Im wesentlichen lassen sich drei Typen von Funktionen nach der Art ihrer
Berechnung unterscheiden:

1) Funktionen, die im gesamten Definitions- bzw. Wertebereich durch eine
   Approximation berechnet werden. Das trifft auf die meisten Funktionen
   in 'RealMath' und 'LongMath' zu. Dabei wird folgendermaen vorgegangen:

   o Transformation der Argumente auf einen hinreichend kleinen Bereich.

   o Approximation durch rationale Funktionen R, mit

               P[n](x)
       R(x) := -------   , P und Q Polynome vom Grad n bzw. m.
               Q[m](x)

     Die Polynome werden zwecks Multiplikationsersparnis nach dem
     Horner-Schema zerlegt, also z.B.

                 ((a*x + b)*x + c)*x + d

        statt    a*x^3 + b*x^2 + c*x + d.

     Die Approximationen sind aus [Hart68] (siehe Literaturverzeichnis).
     Die Namen der Prozeduren entsprechen den Namen der Approximations-
     funktionen im Buch.

   o Skalierung des Ergebnisses, falls die Approximation nicht den
     gesamten Wertebereich liefert.

   o Bei `kleinen' Argumenten werden statt der obigen Schritte manchmal
     auch die ersten Glieder der Reihenentwicklung nach Taylor verwendet.


2) Funktionen, bei denen je nach Gre der Argumente eine andere
   Berechnung verwendet wird. Das trifft vor allem auf die (inversen)
   hyperbolischen Funktionen zu. Das sieht dann etwa so aus:

   o Bei `mittleren' Argumenten wird direkt die mathematische Definition
     umgesetzt.

   o Bei `groen' Argumenten kann eine einfachere Variante der Definition
     verwendet werden, da hierbei wegen der begrenzten Stellenzahl
     Teilberechnungen entfallen knnen.

   o Bei `kleinen' Argumenten kann es wegen Stellenauslschung bei direkter
     Anwendung der Definition zu Fehlern kommen; deswegen werden hierfr
     direkte Approximationen (ohne Transformation der Argumente)
     verwendet oder die ersten Glieder der Reihenentwicklung nach Taylor.


3) Funktionen, die durch eine einzelne Formel fr den gesamten
   Definitions- bzw. Wertebereich berechnet werden, wobei gegebenenfalls
   die mathematische Definition etwas umgeformt wurde, wenn sie numerisch
   nicht so geeignet ist (z.B. Stellenauslschung). Das betrifft
   vor allem die Funktionen fr komplexe Zahlen.


Bei den meisten Funktionen werden im Implementationsmodul alle fr die
Berechnung verwendeten Formeln, einschlielich der Transformations- bzw.
Skalierungsformeln, aufgefhrt und/oder eine Referenz fr eins der unten
aufgelisteten Bcher angegeben.


Reihenentwicklung
=================
Bei hinreichend kleinen Argumenten werden einige Funktionen durch die
ersten Glieder ihrer Reihenentwicklung nach Taylor angenhert. Das bringt
etwas Geschwindigkeit, dient aber vor allem bei den hyperbolischen
Funktionen der Genauigkeit, die sonst bei Anwendung der gegebenen Formeln
durch Stellenausloeschung sinken wuerde. Um zu entscheiden, ab welcher Gre
(des Arguments) dies zulssig ist, mte das Restglied berechnet werden.
Da aber bei den betrachteten Reihen ein Folgeglied immer um zwei Potenzen
kleiner ist als der Vorgnger (betragsmig), und damit die Reihenglieder
bei negativem Exponenten sehr schnell kleiner werden, habe ich stattdessen
als Kriterium genommen, wann das erste nichtbenutzte Reihenglied keine
Auswirkungen mehr auf das erste Reihenglied hat (ist nicht ganz korrekt).

Der kleinste relative Fehler, der in der Zahlendarstellung auftreten kann,
betrgt:

             1/2*ulp(1.0) =: Eps

Die 1/2 wegen der Rundung bei den arithmetischen Operationen.

Damit die Reihenentwicklung angewendet werden kann, soll folgende Unglei-
chung gelten:

             erstes nichtbenutztes Reihenglied
             ---------------------------------   <  Eps
             erstes Reihenglied

Fr den Sinus sieht das dann z.B. so aus:

                            x^3     x^5     x^7
             sin(x) = x  -  ---  +  ---  -  ---- ...
                             6      120     5040

Es sollen die ersten beiden Reihenglieder benutzt werden:

             x^5
             ---
             120
           -------  <  Eps
              x

             x^4
       <=>   ---    <  Eps
             120

       <=>   x^4    <  120 * Eps
                          ___________
                       4 /
       <=>   x      <  \/  120 * Eps

Allgemein gilt bei den betrachteten Reihen:

                        _________
                     4 /
       SeriesExp  =  \/  Eps / K

wenn die ersten beiden Reihenglieder benutzt werden, und
                        _________
                     6 /
       SeriesExp  =  \/  Eps / K

wenn die ersten drei Reihenglieder benutzt werden. 'K' ist hierbei der
Koeffizient des ersten unbenutzten Reihengliedes und 'SeriesExp' ist
der (betragsmig) grte Wert des Arguments, bis zu dem die Reihen-
entwicklung ohne Fehler verwendet werden kann.

Auf diese Weise wurden auch bei den anderen Funktionen die Grenzwerte fr
die Reihentwicklung berechnet und auf zwei Stellen abgeschnitten.
Wenn die Werte nicht hundertprozentig stimmen, macht das auch nicht viel,
da der Fehler durch die Reihenentwicklung auch nicht grer ist, als
der Fehler durch die Approximation und Abbruch- und Rundungsfehler (hoffe
ich).

Wenn hinter den Formeln Zahlen in Klammern stehen, beziehen sich diese auf
entsprechende Angaben/Formeln in [Hart68], wenn nicht anders vermerkt.
Die Reihenentwicklungen sind aus [Bron87].


Genauigkeit
===========
Wenn bei den Approximationen steht, da sie 'x' Stellen Genauigkeit auf
dem angegebenen Intervall haben, heit das genauer, da der relative
(oder absolute) Fehler maximal 10^(-x) betrgt. Dies ist aber nur ein
theoretischer Wert, da erstens die Stellenzahl geringer ist (die
Approximationen wurden extra danach ausgewhlt), und zweitens entstehen
bei der Berechnung Rundungsfehler und Stellenverluste bei der
Subtraktion/Addition.

Grob gesagt, nimmt die Genauigkeit der Funktionen mit der unterschiedlichen
Art ihrer Berechnung von 1) nach 3) ab. Dies gilt vor allem im Hinblick
auf sehr kleine oder sehr groe Argumente (z.B. Exponentialfunktionen)
oder Argumente, die am Rand des Definitionsbereiches (z.B. inverse
trigonometrische Funktionen) liegen. Die Genauigkeit liee sich vermutlich
durch andere Arten der Berechnung noch verbessern, die mir aber nicht
bekannt sind.

Zum Teil sind die Probleme aber auch prinzipieller Natur. Beispielsweise
kann bei den trigonometrischen Funktionen wegen der begrenzten
Stellenzahl der absolute Fehler des Ergebnisse in der Grenordnung des
absoluten Fehlers des Argumentes sein, d.h. die Genauigkeit nimmt mit
der Gre des Argumentes ab.

Z.B. sollten
              sin(1.2345678E-4)
    und       sin(1.2345678E-4 + 2.0*pi)

das gleiche Ergebnis liefern; da aber die erste gltige Ziffer von pi
einen Exponenten 10^0 hat, ist der Exponent der kleinsten darstellbaren
Ziffer ungefaehr 10^(-7) (bei 7 - 8 mit REAL darstellbaren Ziffern).
Das bedeutet aber, da das Argument nur noch bis ungefhr zur vierten
Stelle enthalten ist, es wird also etwa

              sin(1.234E-4)   berechnet.

Wird zum Argument ein noch grerer Wert addiert, z.B. mit einem Exponenten
grer 10^4, ist das Ergebnis vllig ohne Bedeutung, da das eigtl. Argument
in den acht Stellen gar nicht mehr enthalten ist.

Dieses Verhalten macht sich besonders in der Naehe der Nullstellen der
Funktionen (ausgenommen die Nullstelle um x = 0 bei Sinus und Tangens,
aber leider bei der ersten Nullstelle des Kosinus bei Pi/2) unangenehm
bemerkbar, da hier ein kleiner absoluter Fehler einen grossen relativen
Fehler bedeutet.

Das eben Beschriebene betrifft sinngem auch andere periodische Funktionen.


Literatur:
==========

o [Bron87] I.N. Bronstein, K.A. Semendjajew: Taschenbuch der Mathematik,
           BSB B.G. Teubner Verlagsgesellschaft, Leipzig, 1987

  / So eine Art Lexikon zu allen mglichen Themen der Mathematik
    (Wer kennt diesen Wlzer nicht...), allerdings verhindert
    eine ganze Menge mathematisches Fachchinesisch ein leichtes
    Verstndnis. /

o Handbuch der Mathematik, Buch und Zeit Verlagsges. m.b.H. Kln

  / Das ist ebenfalls so ein Lexikon, es ist zwar nicht so umfassend,
    was die Menge der Spezialthemen angeht, dafr ist aber das meiste
    verstndlich und z.T. recht ausfhrlich geschrieben und mit
    Bildern versehen. /

o [Abram70] Handbook of Mathematical Functions, Edited by Milton Abramowitz
            and Irene Stegun, Dover Publications, New York, 1970

  / Das ist zum einen eine (relativ unbersichtliche, aber sehr umfangreiche)
    Formelsammlung, zu 90% aber besteht das Buch aus Tabellen aller mglichen
    und unmglichen Funktionen fr eine groe Anzahl Argumente. Diese
    Tabellen lassen sich ganz gut zum berprfen von Mathe-Routinen
    verwenden. Die Formelsammlung hat den Vorteil, da auch das Verhalten
    der Funktionen im Komplexen beschrieben wird. /

o [Vand83] Vandergraft, James S.: Introduction to Numerical Computations,
           Second Edition, Academic Press, 1983

  / Grundlegende Einfhrung in die Numerik, angefangen bei der untersten
    Ebene, der Reprsentation im Rechner, den daraus resultierenden
    Fehlerquellen usw. bis zur Implementation von numerischer Integration,
    Lsen von Gleichungssystemen u.. /

o [Vlz89] Vlzke, Hagen: Fliekomma-Arithmetik und IEEE-Spezifikationen,
           'mc' Serie 10/88 - 2/89

  / Verstndliche Einfhrung in das Thema. Beispielimplementierungen
    der Grundfunktionen in einfacher Genauigkeit fr 68000 und 8086. /

o [Eng88] G.Engel-Mllges, F.Reuter: Formelsammlung zur Numerischen
          Mathematik mit MODULA 2-Programmen, BI-Wissenschaftsverlag,
          Mannheim, 1988

o [Hart68] Hart, John F., et al.: Computer Approximations, The SIAM Series
           in Applied Mathematics, John Wiley & Sons, New York, 1968

  / Das wichtigste der aufgefhrten Mathe-Bcher: Der erste Teil des
    Buches beschftigt sich grundstzlich mit der Approximation
    von Funktionen durch andere, einfachere Funktionen (Mathematik-
    wissen ntig) und der Realisation im Rechner. Der zweite Teil
    besteht, jeweils fr Gruppen zusammengehrender Funktionen, aus
    Formeln, die im Zusammenhang mit diesen Funktionen existieren,
    Hinweisen zur Programmierung und einer Auflistung diverser
    Approximationen und deren Genauigkeiten. Der dritte, grte Teil
    enthlt schlielich die Koeffizienten aller Approximations-
    polynome.
    Manchmal wird allerdings beim Lesen des Buches nicht klar, was
    eigentlich gemeint ist (aber das kann auch an meinen Englisch-
    Kenntnissen liegen).

    Im brigen scheinen so ziemlich alle Implementierungen mathematischer
    Funktionen auf Rechnern sich der Approximationen dieses Buches
    zu bedienen -- jetzt stelle man sich vor, in den riesigen Zahlen-
    kolonnen der Koeffizienten haben sich Fehler eingeschlichen, und
    alle haben diese Fehler brav abgeschrieben...Soweit ich wei, gibt es
    auch nur die eine Auflage von 1968. /

o Quelltexte zur Portable Math Library (pml) fr GNU-C.

o Quelltexte zu CMPLX_16, einer Bibliothek fr komplexe Zahlen in
  FORTRAN 77 von Thomas Gro von 1989.
