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