Sdílet prostřednictvím


_matherr

Zpracovává chyby matematiku.

int _matherr( 
   struct _exception *except  
);

Parametry

  • s výjimkou
    Ukazatel na strukturu obsahující informace o chybě.

Vrácená hodnota

_matherr , vrátí hodnotu 0 k označení chyby nebo nenulová hodnota označuje úspěšné provedení.Pokud _matherr vrátí hodnotu 0, chybová zpráva může být zobrazen a errno je nastavena na příslušnou chybovou hodnotu.Pokud _matherr vrátí nenulovou hodnotu, žádná chybová zpráva se zobrazí a errno zůstane beze změny.

Další informace o návratových kódů naleznete v tématu _doserrno, kód chyby, _sys_errlist a _sys_nerr.

Poznámky

_Matherr funkce zpracování chyb generovaných funkcí math library s plovoucí desetinnou čárkou.Tyto funkce call _matherr Pokud je zjištěna chyba.

Pro zpracování zvláštní chyb můžete zadat jinou definici _matherr.Pokud používáte dynamicky propojené verze knihovny běhu jazyka C (Msvcr90.dll), můžete nahradit výchozí _matherr rutinní v klientského spustitelného souboru s vlastní verzí.Však nemůže nahradit výchozí _matherr v klienti DLL Msvcr90.dll rutinní.

Nastane-li chyba v běžné matematické, _matherr je volána s ukazatelem _exception strukturu (definováno v Math.h) zadejte jako argument._Exception struktura obsahuje následující prvky.

  • typ int
    Typ výjimky.

  • Char * název
    Název funkce, kde došlo k chybě.

  • dvojité arg1, arg2
    První a druhé (pokud existuje) argumenty funkce.

  • dvojité retval
    Hodnota, která má být funkcí vrácen.

Typu Určuje typ matematické chyby.Je jedna z následujících hodnot definovaných v Math.h.

  • _DOMAIN
    Argument domény došlo k chybě.

  • _SING
    Argument singularity.

  • _OVERFLOW
    Rozsah chyby přetečení.

  • _PLOSS
    Částečnou ztrátu významu.

  • _TLOSS
    Celkové ztráty významu.

  • _UNDERFLOW
    Výsledkem je příliš malé a nelze. (Tato podmínka není momentálně podporována.)

Struktura členské jméno je ukazatel na řetězec zakončený hodnotou null obsahující název funkce, která způsobila chybu.Členy struktury arg1 a arg2 určit hodnoty, které způsobily chybu. (Je-li pouze jeden argument není uveden, je uložen v arg1.)

Ve výchozím nastavení vrátí hodnotu dané chyby retval.Pokud změníte hodnotu vrácenou, musíte určit, zda ve skutečnosti došlo k chybě.

Požadavky

Rutina

Požadované záhlaví

_matherr

<math.h>

Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.

Knihovny

Všechny verze běhových knihoven C.

Příklad

// 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 */
}

Výsledek

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

Ekvivalent v rozhraní .NET Framework

Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.

Viz také

Referenční dokumentace

Podpora plovoucí desetinné čárky

Long Double