Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ matherr(3M) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

math(5)

matherr(3M)                                                     matherr(3M)

NAME
     matherr - Fehlerbehandlungsfunktion

SYNTAX
     cc [option ...] datei ... -lm [bibliothek ...]

     #include <math.h>

     int matherr(struct exception *x);

BESCHREIBUNG
     matherr() wird von Funktionen der mathematischen Bibliothek zur
     Festellung von Fehlern aufgerufen. Beachten Sie, daß matherr() nicht
     aufgerufen wird, wenn die Übersetzeroption -kansi verwendet wird. Die
     Benutzer können eigene Prozeduren zur Behandlung von Fehlern definie-
     ren, indem sie eine Funktion mit dem Namen matherr() in den jeweiligen
     Programme vorsehen. matherr() muß die obenstehende Form aufweisen. Bei
     Auftreten eines Fehlers wird ein Zeiger auf die Struktur x zur
     Beschreibung der Ausnahmesituation an die vom Benutzer bereitgestellte
     Funktion matherr() weitergereicht. Diese Struktur, die in der
     Include-Datei math.h definiert ist, hat folgende Form:

        struct exception {
              int type;
              char *name;
              double arg1, arg2, retval;
        };

     Das Element type ist eine Zahl vom Typ int, die den Typ des aufgetre-
     tenen Fehlers anhand der nachstehenden Liste (in der Include-Datei
     definiert) von Konstanten beschreibt:

     DOMAIN      Argument außerhalb des Definitionsbereichs

     SING        Singularität des Arguments

     OVERFLOW    Überlauf des Ergebnisses

     UNDERFLOW   Unterlauf des Ergebnisses

     TLOSS       totaler Verlust der Genauigkeit

     PLOSS       teilweiser Verlust der Genauigkeit

     Das Element name weist auf eine Zeichenkette mit dem Namen der Funk-
     tion, in der der Fehler aufgetreten ist. Die Variablen arg1 und arg2
     sind die Argumente, mit denen die Funktion aufgerufen wurde. retval
     wird auf den Standardwert gesetzt, der von der Funktion zurückgegeben
     wird, wenn es nicht von der Funktion matherr() auf einen anderen Wert
     gesetzt wird.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

matherr(3M)                                                     matherr(3M)

     Wenn die Funktion matherr() einen Wert ungleich null zurückgibt, wer-
     den keine Fehlermeldungen ausgegeben, und errno wird nicht gesetzt.

     Wenn matherr() nicht vom Benutzer bereitgestellt wird, dann werden bei
     Auftreten eines Fehlers die bei den betroffenen mathematischen Funk-
     tionen beschriebenen Standard-Fehlerbehandlungs-Prozeduren aufgerufen.
     Diese Prozeduren sind in der nachstehenden Tabelle zusammengefaßt. In
     jedem Fall wird errno auf EDOM oder ERANGE gesetzt, und das Programm
     läuft weiter.

__________________________________________________________________________
|                Standardprozeduren für Fehlerbehandlung                 |
|_____________________|__________________________________________________|
|                     |                    Fehlertypen                   |
|_____________________|_______|_____|_________|__________|_______|_______|
|        type         | DOMAIN| SING| OVERFLOW| UNDERFLOW| TLOSS | PLOSS |
|_____________________|_______|_____|_________|__________|_______|_______|
|        errno        |  EDOM | EDOM|  ERANGE |  ERANGE  | ERANGE| ERANGE|
|_____________________|_______|_____|_________|__________|_______|_______|
|BESSEL:              |   -   |  -  |    -    |     -    |  M, 0 |   -   |
|y0, y1, yn (arg <= 0)| M, -H |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|EXP, EXPF:           |   -   |  -  |    H    |     0    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|LOG, LOG10:          |       |     |         |          |       |       |
|LOGF, LOG10F:        |       |     |         |          |       |       |
|(arg < 0)            | M, -H |  -  |    -    |     -    |   -   |       |
|(arg = 0)            | M, -H |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|POW, POWF:           |   -   |  -  |    +H   |     0    |   -   |   -   |
|neg ** nicht-int     |  M, 0 |  -  |    -    |     -    |   -   |   -   |
|  0 ** nicht-pos     |  M, 0 |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|SQRT, SQRTF:         |  M, 0 |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|FMOD, FMODF:         |       |     |         |          |       |       |
|(arg2 = 0)           |  M, X |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|REMAINDER:           |       |     |         |          |       |       |
|(arg2 = 0)           |  M, N |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|GAMMA, LGAMMA:       |   -   | M, H|    H    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|HYPOT:               |   -   |  -  |    H    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|SINH, SINHF:         |   -   |  -  |    +H   |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|COSH, COSHF:         |   -   |  -  |    H    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|





Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

matherr(3M)                                                     matherr(3M)

__________________________________________________________________________
|                Standardprozeduren für Fehlerbehandlung                 |
|_____________________|__________________________________________________|
|                     |                    Fehlertypen                   |
|_____________________|_______|_____|_________|__________|_______|_______|
|        type         | DOMAIN| SING| OVERFLOW| UNDERFLOW| TLOSS | PLOSS |
|_____________________|_______|_____|_________|__________|_______|_______|
|        errno        |  EDOM | EDOM|  ERANGE |  ERANGE  | ERANGE| ERANGE|
|_____________________|_______|_____|_________|__________|_______|_______|
|ASIN, ACOS, ATAN2:   |       |     |         |          |       |       |
|ASINF, ACOSF, ATAN2F:|  M, 0 |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|ACOSH:               |  M, N |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|ATANH:               |       |     |         |          |       |       |
|(|arg| > 1)          |  M, N |  -  |    -    |     -    |   -   |   -   |
|(|arg| = 1)          |   -   | M, N|    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|

     Abkürzungen

     M       Meldung wird ausgegeben (nicht im ANSI-Modus).

     H       HUGE wird zurückgegeben (HUGEVAL im ANSI-Modus).

     -H      -HUGE wird zurückgegeben (-HUGEVAL im ANSI-Modus).

     +H      HUGE oder -HUGE wird zurückgegeben (HUGEVAL oder -HUGEVAL im
             ANSI-Modus).

     0       0 wird zurückgegeben.

     X       arg1 wird zurückgegeben.

     N       NaN wird zurückgegeben.



















Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

matherr(3M)                                                     matherr(3M)

BEISPIELE
     #include <math.h>
     #include <stdio.h>
     #include <stdlib.h>
     #include <string.h>

     int
     matherr(register struct exception *x);
     {
         switch (x->type) {
         case DOMAIN:
              /* sqrt verändern, so daß sqrt(-arg1) zurückgegeben wird,*/
              /* nicht 0 */
              if (!strcmp(x->name, "sqrt")) {
                      x->retval = sqrt(-x->arg1);
                      return (0); /* Meldung ausgeben und errno setzen */
              }
         case SING:
              /* Bei allen anderen DOMAIN- oder SING-Fehlern, Meldung */
              /* ausgeben und abbrechen (abort) */
              fprintf(stderr, "Gültigkeitsbereichsfehler in %s\n",
                      x->name);
              abort( );
         case PLOSS:
              /* detaillierte Fehlermeldung ausgeben */
              fprintf(stderr, "Genauigkeitsverlsut in %s(%g)=%g\n"
                      x->name, x->arg1, x->retval);
              return (1); /* keine weiteren Maßnahmen ergreifen */
         }
           return (0); /* bei allen anderen Fehlern die
                          Standardprozedur ausführen */
     }

SIEHE AUCH
     math(5).



















Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026