Freigeben über


_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.

Siehe auch

Referenz

Gleitkommaunterstützung

Langes Double