8.9.2
Mathematische Funktionen
Die in der Headerdatei MATH.H deklarierten numerischen Funktionen führen Operationen
mit Gleitkommazahlen durch und sind nur für double–Argumente (64 Bit) definiert.
Die übrigen mathematischen Funktionen können nur auf ganzzahlige Werte angewendet
werden. Sie sind in der Headerdatei STDLIB.H deklariert.
Hinweis
Die in der Header-Datei MATH.H enthaltenen Funktionen liefern als Ergebnis einer
Berechnung immer eine Approximation, deren Genauigkeit durch die des numerischen
Coprozessors begrenzt ist.
Allgemeine Fehlerbetrachtung
Die Fehlerbehandlung im numerischen Teil der CRUN–Bibliothek wird in zwei Stufen
durchgeführt.
1. Tritt in einer numerischen Funktion ein Fehler auf, wird zuerst die zu programmierende
2. Diese Funktion zeigt in ihrem Rückgabewert an, ob der Fehler korrigiert werden konnte.
Die Fehlerbehandlung mittels
UNIX SYSTEM V übernommen. Das Setzen der Variablen
speziellen Wertes ist jedoch ANSI–konform.
Innerhalb der numerischen Funktionen sind zwei Arten von Fehlern möglich:
Wenn ein Argument außerhalb des Definitionsbereichs der Funktion liegt, so wird ein
DOMAIN ERROR ausgelöst. In diesem Fall wird die Variable
gesetzt und ein implementationsabhängiger Wert zurückgeliefert. Für die CRUN–Bibliothek
ist dies der im ISO/IEC DIS 9899–Standard festgelegte Wert IND. Dabei handelt es sich um
ein negatives NaN (Not a Number). Dieses NaN ist ein spezielles Zahlenformat des 8087.
Ein NaN wird z.B. durch die Funktion
ausgegeben.
Liegt das Ergebnis nicht mehr im darstellbaren Bereich, wird ein RANGE ERROR ausgelöst.
Bei einem Bereichsüberlauf wird der Wert HUGE_VAL und bei einem Bereichsunterlauf 0
zurückgegeben. In beiden Fällen wird
Coprozessor eine Overflow– oder eine Underflow–Exception über den Signal–Handler
ausgelöst wird, hängt davon ab, ob im Coprozessor diese Exceptions freigegeben sind. Bei
den trigonometrischen Funktionen
RMOS3 V3.50 Benutzerhandbuch
Bedienhandbuch, 07/2012, A5E03692290-01
anwenderspezifische Funktion
Ist dies der Fall, wird von der numerischen Funktion der korrigierte Wert an das
Anwenderprogramm zurückgeliefert.
Wird von
keine Fehlerkorrektur vorgenommen, ist die weitere Behandlung davon
matherr
abhängig, ob im Coprozessor die zugehörige Exception freigegeben oder gesperrt ist.
Ist dies der Fall (z.B. OVERFLOW freigegeben), so wird durch Setzen des
entsprechenden Bits im Coprozessor–Statusregister der Signalhandler für SIGFPE
aufgerufen.
Im anderen Fall wird ein vordefinierter Wert zurückgegeben (z.B. +HUGE_VAL bei
). Zusätzlich wird die Variable
exp(5000)
gesetzt.
Betriebssystem-Eigenschaften von RMOS3
aufgerufen.
matherr
auf einen entsprechenden Fehlerwert
errno
ist nicht im ANSI–Standard enthalten, sondern aus
matherr
als Zeichenstring "+NaN" oder "–NaN"
printf
auf ERANGE gesetzt. Ob durch den
errno
,
und
wird
sin
cos
tan
8.9 C-Runtime-Bibliothek CRUN
und die Rückgabe eines
errno
auf den Wert EDOM
errno
nicht gesetzt.
errno
153