Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

cplxerr Fehlerbehandelnde Funktionen

&pagelevel(3)&pagelevel


In diesem Abschnitt wird die fehlerbehandelnde Funktion erläutert, die für die komplexe Mathematik in C++ eingesetzt wird.

#include <complex.h>

class c_exception

int
char
complex
complex
complex

type;
*name;
arg1;
arg2;
retval;

public:

c_exception(char *n, const complex& a1, const complex& a2 = complex_zero);

friend int complex_error(c_exception&);

friend complex exp(complex);
friend complex sinh(complex);
friend complex cosh(complex);
friend complex log(complex);

};



int i = complex_error(c_exception & x)

Die fehlerbehandelnde Funktion complex_error wird aufgerufen, wenn ein Fehler beieiner der vier folgenden Funktionen auftritt:

friend complex exp(complex)
friend complex sinh(complex)
friend complex cosh(complex)
friend complex log(complex)


Benutzer können eigene Prozeduren zur Fehlerbehandlung definieren, indem eine Funktion mit dem Namen complex_error in das Programm aufgenommen wird. complex_error muß die oben beschriebene Form aufweisen.

In der Klasse c_exception ist das Element type eine Ganzzahl, die den Typ des aufgetretenen Fehlers beschreibt. Der Wert muß in der folgenden Liste von Konstanten enthalten sein (die Definition finden Sie in der Include-Datei <complex.h>):

SING
OVERFLOW
UNDERFLOW

Singularität des Arguments
Überlauffehler
Unterlauffehler

Das Element name zeigt auf eine Zeichenkette, die den Namen der Funktion enthält, inder der Fehler aufgetreten ist. Die Variablen arg1 und arg2 sind die Argumente, mitdenen die Funktion aufgerufen wurde. Der Standardrückgabewert der Funktion wird anretval zugewiesen, sofern der Wert nicht durch die benutzereigene complex_error-Funk-tion verändert wird.

Wenn die benutzerdefinierte Funktion complex_error einen Wert ungleich 0 liefert, wirdkeine Fehlermeldung ausgegeben, und errno wird nicht gesetzt.

Wenn keine benutzereigene Funktion mit dem Namen complex_error bereitsteht, werden beim Auftreten eines Fehlers die Standardprozeduren für die Fehlerbehandlung aufgerufen. Diese werden bei den jeweiligen Funktionen unter "FEHLERERGEBNISSE"beschrieben. Eine Zusammenfassung der Standardfehlerbehandlung finden Sie in der folgendenTabelle. In jedem Fall wird errno auf EDOM oder ERANGE gesetzt und das Programmfortgeführt.

In der folgenden Tabelle bedeuten:

M
(H, 0)
(±H, ±H)
(0, 0)

Meldung wird ausgegeben (EDOM-Fehler)
(HUGE, 0) wird geliefert
(±HUGE, ±HUGE) wird geliefert
(0, 0) wird geliefert

STANDARDPROZEDUREN FÜR DIE FEHLERBEHANDLUNG          


Fehlerarten

type

SING

OVERFLOW

UNDERFLOW

errno

EDOM

ERANGE

ERANGE

EXP:

Realteil zu groß oder klein

Imaginärteil zu groß


 

(±H, ±H)

(0, 0)

 

(0,0)

LOG:

arg = (0, 0)

 

M, (H, 0)

 

-

 

-

SINH:

Realteil zu groß

Imaginärteil zu groß



(±H, ±H)

(0, 0)


COSH:

Realteil zu groß

Imaginärteil zu groß


 

(±H, ±H)

(0, 0)


BEISPIEL

Das folgende Programm legt eine komplexe Zahl unter Verwendung des Standardkonstruktors an, der das Wertepaar (0.0, 0.0) vorgibt, und ruft dann die Funktion log() mit (0.0, 0.0) auf. Diese Operation ruft einen Fehler hervor, da log(0.0, 0.0) nicht definiert ist. Die Funktion complex_error() wird wegen dieses Fehlers aufgerufen.

#include <iostream.h>
#include <complex.h>
#include <stdlib.h>
int complex_error(c_exception & p)
{
  cerr << "Fehler bei der Verarbeitung von ";
  cerr << p.name << " ( " << p.arg1 << " )\n";
  exit (1);
  return 0; /* WIRD NICHT ERREICHT */
}
main()
{
  complex c;
  c = log (c);
  return 0;
}

Das Ergebnis der Programmausführung ist:

Fehler bei der Verarbeitung von log ( ( 0, 0) )
%  CCM0998 Verbrauchte CPU-Zeit: 0.0005 Sekunden
%  CCM0999 exit 1

SIEHE AUCH


cplxcartpol, cplxexp, cplxops, cplxtrig