Se recomienda usar Visual Studio 2017

_matherr

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Controla los errores de matemáticas.

  
      int _matherr(  
   struct _exception *except   
);  

Parámetros

excepto
Puntero a la estructura que contiene información de error.

_matherr devuelve 0 para indicar un error o un valor distinto de cero para indicar que es correcto. Si _ matherr devuelve 0, un mensaje de error puede mostrarse y errno se establece en un valor de error adecuado. Si _ matherr devuelve un valor distinto de cero, ningún mensaje de error se muestra y errno permanece sin cambios.

Para obtener más información acerca de los códigos de retorno, vea _doserrno, errno, _sys_errlist y _sys_nerr.

El _matherr función procesa los errores generados por las funciones de punto flotante de la biblioteca matemática. Llamar estas funciones _ matherr cuando se detecta un error.

Control de errores especial, puede proporcionar una definición diferente de _matherr. Si utiliza la versión vinculada dinámicamente de la biblioteca de tiempo de ejecución de C (Msvcr90.dll), puede reemplazar el valor predeterminado _ matherr rutinarias en un archivo ejecutable con una versión definido por el usuario del cliente. Sin embargo, no se puede reemplazar el valor predeterminado _matherr rutinarias en un cliente DLL de Msvcr90.dll.

Cuando se produce un error en una rutina de matemáticas, _matherr se llama con un puntero a un _exception tipo de estructura (definida en Math.h) como argumento. El _exception estructura contiene los elementos siguientes.

int (tipo)
Tipo de excepción.

char *nombre
Nombre de la función donde se produjo el error.

arg1 Double, arg2
Primera y segunda (si existe) argumentos a la función.

retval dobles
Valor devuelto por la función.

El tipo especifica el tipo de error matemático. Es uno de los valores siguientes, definidos en Math.h.

_DOMAIN
Error de argumento de dominio.

_SING
Singularidad de argumento.

_OVERFLOW
Error de intervalo de desbordamiento.

_PLOSS
Pérdida parcial de importancia.

_TLOSS
Pérdida total de significado.

_UNDERFLOW
El resultado es demasiado pequeño para representarlo. (Esta condición no es admiten actualmente.)

El miembro de estructura nombre es un puntero a una cadena terminada en null que contiene el nombre de la función que produjo el error. Los miembros de estructura arg1 y arg2 especificar los valores que se provocaron el error. (Si solo se proporciona un argumento, se almacena en arg1.)

El valor devuelto predeterminado es el valor para el error determinado retval. Si cambia el valor devuelto, debe especificar si realmente se produjo un error.

RutinaEncabezado necesario
_matherr<math.h>

Para obtener más información sobre compatibilidad, vea Compatibility en la introducción.

Todas las versiones de las bibliotecas en tiempo de ejecución de C.

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

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  

No es aplicable. Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

Compatibilidad de punto flotante
Long Double

Mostrar: