Compartilhar via


_fpieee_flt

Invoca um manipulador de interceptação definida pelo usuário para exceções de ponto flutuante IEEE.

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

Parâmetros

  • excCode
    Código de exceção.

  • excInfo
    Ponteiro para a estrutura de informações de exceção do Windows NT.

  • handler
    Ponteiro para a rotina de manipulador de interceptação de IEEE do usuário.

Valor de retorno

O valor de retorno de _fpieee_flt o valor retornado pelo handler. sistema autônomo como a rotina de filtro IEEE pode ser usado na, exceto a cláusula de um mecanismo de (SEH) de manipulação de exceção estruturada.

Comentários

The _fpieee_flt função chama um manipulador de interceptação definida pelo usuário para exceções de ponto flutuante IEEE e proporciona todas as informações relevantes. Esta rotina serve sistema autônomo um filtro de exceção no mecanismo de SEH, que chama seu próprio manipulador de exceção IEEE, quando necessário.

The _FPIEEE_RECORD estrutura, definida no Fpieee.h, contém informações referentes a uma exceção de ponto flutuante IEEE. Essa estrutura é passada ao manipulador de interceptação definida pelo usuário por _fpieee_flt.

Campo _FPIEEE_RECORD

Descrição

unsigned int RoundingMode, unsigned int Precision

Esses campos contêm informações sobre o ambiente de ponto flutuante no momento em que ocorreu a exceção.

unsigned int Operation

Indica o tipo de operação que causou a interceptação.Se o tipo é uma comparação (_FpCodeCompare), você pode fornecer um o especiais _FPIEEE_COMPARE_RESULT valores (sistema autônomo definido no Fpieee.h) a Result.Value campo. O tipo de conversão (_FpCodeConvert) indica que ocorreu a interceptação durante uma operação de conversão de ponto flutuante. Você pode examinar o Operand1 e Result tipos para determinar o tipo de conversão que está sendo tentada.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result

Essas estruturas indicam os tipos e valores do resultado proposto e operandos:

OperandValid   sinalizar que indica se o valor de resposta é válido.

Format   Tipo de dados de valor correspondente. O tipo de formato pode ser retornado, mesmo se o valor correspondente inválido for válido.

Value   Valor de dados de resultados ou operando.

Observação: Operand3 é usado somente com as funções da família de processador Itanium (IPF).

_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status

_FPIEEE_EXCEPTION_FLAGS contém o campo de um bit por tipo de exceção de ponto flutuante.

Há uma correspondência entre esses campos e os argumentos usados para mascarar exceções fornecidas para _controlfp.

O significado exato de cada bit depende do contexto:

Cause   Cada conjunto bit indica a exceção específica que foi gerada.

Enable   Cada conjunto bit indica que a exceção específica é atualmente não mascarada.

Status   Cada conjunto bit indica que a exceção específica está pendente no momento. Isso inclui exceções que não tenham sido elevadas porque eles foram mascarados por _controlfp.

Pendente exceções são desativadas são disparados quando habilitá-los.Isso pode resultar em um comportamento indefinido ao usar _fpieee_flt sistema autônomo um filtro de exceção. Sempre telefonar _clearfp antes de habilitar exceções de ponto flutuante.

Requisitos

Função

Cabeçalho necessário

_fpieee_flt

<fpieee.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Exemplo

// 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 do NET Framework

Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Suporte de ponto flutuante

_control87 _controlfp, __control87_2

_controlfp_s