_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 mogą być wyświetlane i errno jest ustawiony na wartość odpowiednia informacja o błędzie.Jeśli _matherr zwraca wartość różną od zera, żaden komunikat o błędzie jest wyświetlany i errno pozostaje bez zmian.
Aby uzyskać więcej informacji na temat kodów zwrotnych, zobacz _doserrno, numer błędu, _sys_errlist i _sys_nerr.
Uwagi
_Matherr funkcja przetwarzania błędów generowanych przez zmiennoprzecinkowych funkcje biblioteka funkcji matematycznych.Funkcje te wywołania _matherr gdy zostanie wykryty błąd.
Do obsługi błędów specjalnych, można podać inną definicję _matherr.Jeśli używasz wersji dynamicznie połączonej biblioteki wykonawczej C (Msvcr90.dll), można zastąpić domyślną _matherr rutynowych w ten plik przy użyciu wersji zdefiniowanej przez użytkownika.Jednak nie można zastąpić domyślną _matherr rutynowych w kliencie DLL Msvcr90.dll.
Kiedy wystąpi błąd w rutynowych matematyczne, _matherr jest wywoływana z wskaźnik do _exception strukturę (zdefiniowaną w Math.h) należy wpisać jako argument._Exception struktura zawiera następujące elementy.
Typ int
Typ wyjątku.CHAR * nazwa
Nazwa funkcji, gdzie wystąpił błąd.podwójne arg1, argument2
Pierwsza i druga (jeśli istnieje) argumenty funkcji SQL.podwójne retval
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.
_DOMAIN
Argument domeny wystąpił błąd._SING
Argument Osobliwości._OVERFLOW
Zakres błąd przepełnienia._PLOSS
Częściowa utrata znaczenia._TLOSS
Całkowita utrata znaczenia._UNDERFLOW
Wynik jest zbyt mały, aby być reprezentowana. (Warunek ten nie jest aktualnie obsługiwane.)
Członek struktury Nazwa jest wskaźnik na ciąg zakończony znakiem null, zawierający nazwę funkcji, która spowodowała błąd.Członkowie struktury arg1 i argument2 określić wartości, które spowodowały błąd. (Jeśli tylko jeden argument zostanie określony, jest on przechowywany w arg1.)
Domyślnie zwracają wartość dla danego błędu jest retval.Jeżeli zmienisz wartość zwracana, należy określić, czy rzeczywiście wystąpił błąd.
Wymagania
Procedura |
Wymagany nagłówek |
---|---|
_matherr |
<math.h> |
Aby uzyskać więcej informacji na temat zgodności, zobacz Zgodność we Wstępie.
Biblioteki
Wszystkie wersje Bibliotek uruchomieniowych 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ć standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.