Udostępnij za pośrednictwem


_matherr

Obsługuje błędy zapisu matematycznego.

int _matherr(
   struct _exception *except 
);

Parametry

  • z wyjątkiem
    Wskaźnik do struktury, zawierające informacje o błędzie.

Wartość zwracana

_matherr zwraca wartość 0, aby wskazać błąd lub wartość różną od zera do wskazania sukcesu.Jeśli _matherr zwraca wartość 0, komunikat o błędzie może być wyświetlany i errno jest ustawiona na wartość błędu właściwe.Jeśli _matherr zwraca wartość różną od zera, żaden komunikat o błędzie jest wyświetlany i errno pozostaje niezmieniony.

Aby uzyskać więcej informacji na temat kody powrotne, zobacz _doserrno, errno, _sys_errlist i _sys_nerr.

Uwagi

_Matherr funkcja przetwarza błędy generowane przez funkcje zmiennoprzecinkowych biblioteka funkcji matematycznych.Te funkcje wywołania _matherr po wykryciu błędu.

Do obsługi błędów specjalnych, można dostarczyć różnych definicji _matherr.Jeśli używasz dynamicznie dołączana wersja biblioteki uruchomieniowej C (Msvcr90.dll), można zastąpić _ domyślnematherr rutynowych w kliencie wykonywalnego wersji zdefiniowanej przez użytkownika.Jednakże nie można zastąpić domyślną _matherr rutynowych w kliencie DLL z Msvcr90.dll.

Kiedy wystąpi błąd w rutynowych matematycznych, _matherr jest wywoływana z wskaźnik do _exception typu konstrukcji (zdefiniowaną w Math.h funkcje) jako argumentu._Exception struktura zawiera następujące elementy.

  • Typ int
    Typ wyjątku.

  • CHAR * nazwa
    Nazwa funkcji, w którym wystąpił błąd.

  • podwójne arg1, argument2
    Pierwszy i drugi (jeśli ma zastosowanie) argumenty funkcji.

  • Parametr retval podwójne
    Wartość zwracaną przez funkcję.

Typu określa typ błędu zapisu matematycznego.Jest to jeden z następujących wartości, określonych w Math.h funkcje.

  • _DOMAIN
    Argument domeny wystąpił błąd.

  • _SING
    Argument singularity.

  • _OVERFLOW
    Zakres błąd przepełnienia.

  • _PLOSS
    Częściowa utrata znaczenie.

  • _TLOSS
    Całkowita utrata znaczenie.

  • _UNDERFLOW
    Wynik jest za mały, aby być reprezentowana.(Warunek ten nie jest aktualnie obsługiwane.)

Członek struktury Nazwa jest wskaźnikiem do ciąg zakończony znakiem null, zawierające nazwę funkcji, który spowodował błąd.Członkowie struktury arg1 i argument2 należy określić wartości, które spowodowały błąd.(Jeśli tylko jeden argument jest podany, jest on przechowywany w arg1.)

Domyślnie zwraca wartość dla danego błędu jest retval.Jeżeli zmienisz wartość zwracana, należy określić, czy rzeczywiście wystąpił.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

_matherr

<math.h>

Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.

Biblioteki

Wszystkie wersje biblioteki uruchomieniowej c.

Przykład

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

Dane wyjściowe

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

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.

Zobacz też

Informacje

Wsparcie zmiennoprzecinkowe

Podwójne długie