_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 de 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 por handler.Como tal, a rotina de filtro IEEE pode ser usada na, exceto a cláusula de um mecanismo de (SEH) de manipulação de exceção estruturada.
Comentários
O _fpieee_flt invoca um manipulador de interceptação definida pelo usuário para exceções de ponto flutuante IEEE de função e fornece-o com todas as informações relevantes.Essa rotina serve como um filtro de exceção no mecanismo de SEH, que chama o seu próprio manipulador de exceção IEEE, quando necessário.
O _FPIEEE_RECORD estrutura, definida em Fpieee.h, contém informações relativas a uma exceção de ponto flutuante IEEE.Essa estrutura é passada para o 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 a exceção ocorreu. |
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 do especial _FPIEEE_COMPARE_RESULT valores (conforme definido em Fpieee.h) a Result.Value campo.O tipo de conversão (_FpCodeConvert) indica que a interceptação ocorreu 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: OperandValidSinalizador que indica se o valor de resposta é válido. FormatTipo de dados do valor correspondente.O tipo de formato pode ser retornado, mesmo se o valor correspondente não é válido. ValueValor de dados de resultado ou operando. Obs.: Operand3 é usado somente com as funções da família de processadores 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 as exceções fornecidas para _controlfp. O significado exato de cada bit depende do contexto: CauseCada bit indica que a exceção em particular que foi gerada. EnableCada bit indica que a exceção em particular no momento não mascarada. StatusCada bit indica que a exceção em particular está pendente no momento.Isso inclui exceções não terem sido aumentadas porque eles estavam mascarados pela _controlfp. |
Pendente exceções que estão desativadas são gerados quando você habilitá-los.Isso pode resultar em um comportamento indefinido ao usar _fpieee_flt como um filtro de exceção.Sempre chamar _clearfp antes de habilitar as 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
}
// ...
}
Equivalência do .NET Framework
Não aplicável. Para chamar a função c padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.