Se recomienda usar Visual Studio 2017

_fpieee_flt

 

Publicado: julio de 2016

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

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

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

Parámetros

excCode
Código de la excepción.

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

handler
Puntero a la rutina del controlador de interceptaciones del IEEE del usuario.

El valor devuelto de _fpieee_flt es el valor devuelto por handler. Por tanto, la rutina de filtro del IEEE podría usarse en la cláusula de excepción de un mecanismo de control de excepciones estructurado (SEH).

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

La estructura _FPIEEE_RECORD, definida en Fpieee.h, contiene información relativa a una excepción de punto flotante del IEEE. _fpieee_flt pasa esta estructura al controlador de interceptaciones definido por el usuario.

campo _FPIEEE_RECORDDescripción
unsigned int RoundingMode, unsigned int PrecisionEstos campos contienen información sobre el entorno de punto flotante en el momento que se produjo la excepción.
unsigned int OperationIndica el tipo de operación que produjo la interceptación. Si el tipo es una comparación (_FpCodeCompare), puede proporcionar uno de los valores especiales de _FPIEEE_COMPARE_RESULT (definidos en Fpieee.h) en el campo Result.Value. El tipo de conversión (_FpCodeConvert) indica que la interceptación se produjo durante una operación de conversión de punto flotante. Puede mirar la Operand1 y Result tipos para determinar el tipo de conversión que se está intentando realizar.
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE ResultEstas estructuras indican los tipos y valores del resultado y los operandos propuestos:

 OperandValidMarca que indica si el valor de respuesta es válido.

 FormatTipo de datos del valor correspondiente. El tipo de formato se podría devolver incluso si el valor correspondiente no es válido.

 ValueValor de datos de resultado o el operando.
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status_FPIEEE_EXCEPTION_FLAGS contiene un campo de bits por cada tipo de excepción de punto flotante.

Hay una correspondencia entre estos campos y los argumentos que se utilizan para enmascarar las excepciones proporcionadas a _controlfp.

El significado exacto de cada bit depende de contexto:

 CauseCada bit establecido indica la excepción concreta que se ha generado.

 EnableCada bit establecido indica que la excepción concreta no tiene máscara actualmente.

 StatusCada bit establecido indica que la excepción concreta está pendiente actualmente. Se incluyen las excepciones que no se hayan producido porque _controlfp la había aplicado una máscara.

Las excepciones pendientes que están deshabilitadas se producen cuando se habilitan. Esto puede producir un comportamiento indefinido al utilizar _fpieee_flt como un filtro de excepción. Llame siempre a _clearfp antes de habilitar excepciones de punto flotante.

FunciónEncabezado necesario
_fpieee_flt<fpieee.h>

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

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

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
_control87, _controlfp, __control87_2
_controlfp_s

Mostrar: