_matherr
Behandelt mathematische Fehler.
int _matherr(
struct _exception *except
);
Parameter
- Except
Zeiger auf eine Struktur, die Fehlerinformationen enthält.
Rückgabewert
_matherr wird 0 zurückgegeben, um einen Fehler oder auf einen Wert ungleich 0 (null) an, um Erfolg anzugeben.Wenn _matherr 0 zurückgibt, kann eine Fehlermeldung angezeigt und errno wird einem entsprechenden Fehlerwert festgelegt.Wenn _matherr einen Wert ungleich 0 (null) zurückgegeben wird, wird keine Fehlermeldung angezeigt und errno bleibt unverändert.
Weitere Informationen über Rückgabecodes finden Sie unter _doserrno, errno, _sys_errlist und _sys_nerr.
Hinweise
Die _matherr Fehler im Zusammenhang mit Prozess Funktion generiert durch die der mathematischen Funktionen als Bibliothek._matherr Aufruf dieser Features, wenn ein Fehler erkannt wurde.
Eine spezielle Fehlerbehandlung können Sie eine andere Definition von _matherrbereitstellen.Wenn Sie die dynamisch verknüpfte Version der C-Laufzeitbibliothek (Msvcr90.dll) verwenden, können Sie die standardmäßige _matherr Routine in einer ausführbaren Datei des Clients durch eine benutzerdefinierte Version ersetzen.Sie können jedoch die standardmäßige _matherr Routine in einem DLL-Clienten Msvcr90.dll aus nicht ersetzt werden.
Wenn ein Fehler in einer mathematischen Routine auftritt, wird _matherr mit einem Zeiger auf eine _exception-Typ Struktur (definiert in Math.h) als Argument aufgerufen.Die _exception Struktur enthält die folgenden Elemente.
int-Typ
Ausnahmetyp.char *name
Name der Funktion, in der Fehler aufgetreten ist.doppeltes arg1, arg2
Die erste und zweite (sofern vorhanden) von Argumenten für die Funktion.doppeltes retval
Durch die Funktion zurückzugebenden Wert.
Der Typ gibt den Typ des mathematischen Fehlers an.Es ist einer der folgenden Werte definiert, in Math.h.
_DOMAIN
Argumentbereichsfehler._SING
Argumenteigenheit._OVERFLOW
Bereichsüberlauf-Fehler._PLOSS
Teilverlust Signifikanz an._TLOSS
Gesamter Verlust des Schritts._UNDERFLOW
Das Ergebnis ist zu klein dargestellt werden soll.(Diese Bedingung wird gegenwärtig nicht unterstützt.)
Der Strukturmember Name ist ein Zeiger auf eine auf NULL endende Zeichenfolge, die den Namen der Funktion enthält, die den Fehler verursacht hat.Der Strukturmember arg1 und arg2 geben die Werte an, die den Fehler verursacht hat.(Wenn nur ein Argument angegeben ist, wird er in arg1) gespeichert.
Der standardmäßige Rückgabewert für den angegebenen Fehler ist retval.Wenn Sie den Rückgabewert zu ändern, muss er tatsächlich angeben, ob ein Fehler aufgetreten ist.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
_matherr |
<math.h> |
Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.
Bibliotheken
Alle Versionen Cs.
Beispiel
// crt_matherr.c
/* illustrates writing an error routine for math
* functions. The error function must be:
* _matherr
*/
#include <math.h>
#include <string.h>
#include <stdio.h>
int main()
{
/* Do several math operations that cause errors. The _matherr
* routine handles _DOMAIN errors, but lets the system handle
* other errors normally.
*/
printf( "log( -2.0 ) = %e\n", log( -2.0 ) );
printf( "log10( -5.0 ) = %e\n", log10( -5.0 ) );
printf( "log( 0.0 ) = %e\n", log( 0.0 ) );
}
/* Handle several math errors caused by passing a negative argument
* to log or log10 (_DOMAIN errors). When this happens, _matherr
* returns the natural or base-10 logarithm of the absolute value
* of the argument and suppresses the usual error message.
*/
int _matherr( struct _exception *except )
{
/* Handle _DOMAIN errors for log or log10. */
if( except->type == _DOMAIN )
{
if( strcmp( except->name, "log" ) == 0 )
{
except->retval = log( -(except->arg1) );
printf( "Special: using absolute value: %s: _DOMAIN "
"error\n", except->name );
return 1;
}
else if( strcmp( except->name, "log10" ) == 0 )
{
except->retval = log10( -(except->arg1) );
printf( "Special: using absolute value: %s: _DOMAIN "
"error\n", except->name );
return 1;
}
}
printf( "Normal: " );
return 0; /* Else use the default actions */
}
Output
Special: using absolute value: log: _DOMAIN error
log( -2.0 ) = 6.931472e-001
Special: using absolute value: log10: _DOMAIN error
log10( -5.0 ) = 6.989700e-001
Normal: log( 0.0 ) = -1.#INF00e+000
.NET Framework-Entsprechung
Nicht zutreffend. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.