11. Anlage | ||||||
|
||||||
11.7.1.2 Generic_Complex_Elementary_Functions
Dieses Paket enthält elementare Funktionen, die als Eingabe- und Rückgabewert komplexe Zahlen akzeptieren, wie die Quadratwurzel- oder die Sinusfunktion. Das generische Kindpaket "Ada.Numerics.Generic_Complex_Elementary_Functions" wird wie folgt deklariert:
Diese Paket akzeptiert als generischen Parameter eine Instantiierung des generischen Pakets "Complex_Types". Beispiel:
Neben diesem generischen Paket können zusätzlich analoge, nicht generische Bibliothekspakete mit elementaren Funktionen zu komplexen Zahlen zu vordefinierten Zahlentypen, wie "Float", "Short_Float" oder "Long_Float", angeboten werden, die an Stelle des Basistyps "RealBase" im generischen Paket mit den jeweiligen vordefinierten Typen operieren. Die e-hoch-x-Funktion, Exp, gibt es in zwei Ausprägungen, einmal mit einem Parameter vom Typ "Complex" und mit dem Typ "Imaginary". Die Überladung wurde gewählt, um eine übliche Form mathematischer Notation nachbilden zu können. In Analogie zu den Polarkoordinaten ist die Schreibweise "Rho * Exp( i * Theta ) üblich. Diese mathematische Schreibweise braucht nicht durch die Funktion "Compose_From_Polar" unter Angabe von Rho und Theta ersetzt zu werden. Sondern für einen rein imaginären Wert kann direkt diese Ausprägung der "Exp"-Funktionen verwendet werden. Die reellen oder imaginären Anteile von Ergebnissen folgender Funktionen sind in Übereinstimmung mit den mathematisch exakten Funktionen diskontinuierlich, falls bestimmte Grenzlinien überschritten werden. D. h., wird ein Pfad definiert, der diese Grenzlinie schneidet und der Wert dieser Funktionen längs dieses Pfades bestimmt, so unterscheidet sich das Ergebnis zu drei aufeinanderfolgenden Punkten des Pfades sprunghaft, wenn der erste Punkt auf der einen Seite, der zweite Punkt auf der Grenzlinie und der dritte auf der anderen Seite der Grenzlinie liegen. Für folgende Funktionen gibt es Grenzlinien dieser Art: - Der imaginäre Anteil von "Sqrt" und "Log" haben als Grenzlinie die negative reelle Halbachse. - "**", der Exponentialoperator, hat als Grenzlinie die negative reelle Halbachse für den linken Parameter. - Der reelle (bzw. der imaginäre) Anteil von "Arcsin" und "Arccos" (bzw. "Arctanh") haben als Grenzlinien die reelle Achse links von -1.0 und rechts von +1.0, beim Überqueren der Strecke zwischen -1.0 und +1.0 tritt kein Sprung auf. - Der reelle (bzw. der imaginäre) Anteil von "Arctan" (bzw. "Arcsinh") haben als Grenzlinie die imaginäre Achse unterhalb -i und oberhalb +i. - Der reelle Anteil von "Arccot" hat als Grenzlinie die Strecke auf der imaginären Achse zwischen -i und +i. - Der imaginäre Anteil von "Arccosh" hat als Grenzlinie die reelle Achse links von 1.0. - Der imaginäre Anteil von "Arccoth" hat als Grenzlinie die Strecke zwischen -1.0 und +1.0. Das Kindpaket "Generic_Complex_Elementary_Functions" definiert keine Ausnahmen. Es wird die Ausnahme "Argument_Error" aus dem Vaterpaket "Ada.Numerics" verwendet, wenn für den Exponentialoperator "**" der linke Parameter null und der reelle Teil des linken Parameters (bzw. der Exponent, falls er reell ist) ebenfalls null ist. Die Standardausnahme "Constraint_Error" wird für die Werte ausgelöst, in deren Nähe die korrespondierende mathematische Funktion eine Singularität hat, d. h. das Attribut "Complex_Types.RealMachine_Overflow" einen Überlauf signalisiert (der Typ "Real" ist der generische Parameter des Pakets "Complex_Types"). Das gilt für folgende Funktionen:
Das Ada-Programm "XXX.ada" im Verzeichnis \Beispele\bestimmt für ein Polynom vom Grade 2 mit reellen Koeffizienten die Nullstellen. Als Lösungsalgorithmus wird die Vietasche Regel verwendet. Die Ausgabe sind zwei komplexe Zahlen, die, als Wert für die Unbekannte des Polynoms eingesetzt, null liefern. ??? |
||||||
|