_fpieee_flt

Invoca un controlador de intercepciones definido por el usuario para las excepciones de punto flotante IEEE.

int _fpieee_flt( 
   unsigned long excCode,
   struct _EXCEPTION_POINTERS *excInfo,
   int handler(_FPIEEE_RECORD *) 
);

Parámetros

  • excCode
    Código de excepción.

  • excInfo
    Puntero a la estructura de información de excepción de windows NT.

  • handler
    Puntero a la rutina del controlador de intercepciones IEEE de usuario.

Valor devuelto

el valor devuelto de _fpieee_flt es el valor devuelto por handler.Como tal, la rutina de filtro IEEE podría utilizarse en excepto cláusula de un mecanismo (SEH) de control de excepciones estructurado.

Comentarios

La función de _fpieee_flt invoca un controlador de intercepciones definido por el usuario para las excepciones de punto flotante IEEE y lo proporciona toda la información pertinente.Esta rutina actúa como filtro de excepciones en el mecanismo de SEH, que invoca posee el controlador de excepciones IEEE cuando es necesario.

La estructura de _FPIEEE_RECORD , definido en Fpieee.h, contiene información perteneciente a una excepción flotante IEEE.Esta estructura se pasa al controlador de intercepciones definido por el usuario por _fpieee_flt.

campo de _FPIEEE_RECORD

Descripción

unsigned int RoundingMode, unsigned int Precision

Estos campos contienen información sobre el entorno flotante cuando se ha producido la excepción.

unsigned int Operation

indica el tipo de operación que produjo la captura.Si el tipo es una comparación (_FpCodeCompare), puede proporcionar uno de los valores especiales de _FPIEEE_COMPARE_RESULT (como definido en Fpieee.h) en el campo de Result.Value .El tipo de conversión (_FpCodeConvert) indica que la captura se produjo durante una operación flotante de conversión.Puede consultar los tipos de Operand1 y deResult para determinar el tipo de conversión que se lleva.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result

Estas estructuras indican los tipos y los valores de los resultados y los operandos propuestos:

indicador deOperandValidque indica si el valor de respuesta es válido.

tipo de datos deFormatde valor correspondiente.El tipo de formato podría devolver aunque el valor correspondiente no es válido.

Value Result o valor de los datos del operando.

nota: Operand3 solo se utiliza con funciones de la familia de (IPF) procesadores Itanium.

_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status

el _FPIEEE_EXCEPTION_FLAGS contiene un campo de bits por el tipo de excepción de punto flotante.

Hay una correspondencia entre estos campos y los argumentos utilizados a la máscara las excepciones especificadas en _controlfp.

el significado exacto de cada bit depende de contexto:

el bit del conjunto deCauseEach indica la excepción determinada que se activa.

el bit del conjunto deEnableEach indica que la excepción determinada se desenmascarada actualmente.

el bit del conjunto deStatusEach indica que la excepción determinada se encuentra pendiente.Esto incluye las excepciones que no se han desencadenado porque se enmascaradas por _controlfp.

Pendientes las excepciones que se producen en disabled cuando se habilita.Esto puede producir un comportamiento no definido al utilizar _fpieee_fltcomo filtro de excepción.Siempre llamada _clearfp antes de habilitar excepciones de punto flotante.

Requisitos

Función

Encabezado necesario

_fpieee_flt

<fpieee.h>

Para obtener más información de compatibilidad, vea compatibilidad en la Introducción.

Ejemplo

// crt_fpieee.c
// This program demonstrates the implementation of
// a user-defined floating-point exception handler using the
// _fpieee_flt function.

#include <fpieee.h>
#include <excpt.h>
#include <float.h>
#include <stddef.h>

int fpieee_handler( _FPIEEE_RECORD * );

int fpieee_handler( _FPIEEE_RECORD *pieee )
{
   // user-defined ieee trap handler routine:
   // there is one handler for all 
   // IEEE exceptions

   // Assume the user wants all invalid 
   // operations to return 0.

   if ((pieee->Cause.InvalidOperation) && 
       (pieee->Result.Format == _FpFormatFp32)) 
   {
        pieee->Result.Value.Fp32Value = 0.0F;

        return EXCEPTION_CONTINUE_EXECUTION;
   }
   else
      return EXCEPTION_EXECUTE_HANDLER;
}

#define _EXC_MASK    \
    _EM_UNDERFLOW  + \
    _EM_OVERFLOW   + \
    _EM_ZERODIVIDE + \
    _EM_INEXACT

int main( void )
{
   // ...

   __try {
      // unmask invalid operation exception
      _controlfp_s(NULL, _EXC_MASK, _MCW_EM); 

      // code that may generate 
      // fp exceptions goes here
   }
   __except ( _fpieee_flt( GetExceptionCode(),
                GetExceptionInformation(),
                fpieee_handler ) ){

      // code that gets control 

      // if fpieee_handler returns
      // EXCEPTION_EXECUTE_HANDLER goes here

   }

   // ...
}

Equivalente en .NET Framework

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

Vea también

Referencia

Compatibilidad de punto flotante

_control87, _controlfp, __control87_2

_controlfp_s