_fpieee_flt
Wywołuje program obsługi pułapek zdefiniowany przez użytkownika dla wyjątków zmiennoprzecinkowych IEEE.
Składnia
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parametry
excCode
Kod wyjątku.
excInfo
Wskaźnik do struktury informacji o wyjątku systemu Windows NT.
handler
Wskaźnik do procedury obsługi podlewek IEEE użytkownika.
Wartość zwracana
Zwracana wartość to wartość _fpieee_flt
zwracana przez handler
. W związku z tym procedury filtrowania IEEE mogą być używane w klauzuli z wyjątkiem mechanizmu obsługi wyjątków ustrukturyzowanych (SEH).
Uwagi
Funkcja _fpieee_flt
wywołuje program obsługi pułapek zdefiniowany przez użytkownika dla wyjątków zmiennoprzecinkowych IEEE i udostępnia wszystkie istotne informacje. Ta procedura służy jako filtr wyjątku w mechanizmie SEH, który w razie potrzeby wywołuje własną procedurę obsługi wyjątków IEEE.
Struktura _FPIEEE_RECORD
zdefiniowana w pliku Fpieee.h zawiera informacje dotyczące wyjątku zmiennoprzecinkowego IEEE. Ta struktura jest przekazywana do programu obsługi pułapek zdefiniowanych przez użytkownika przez program _fpieee_flt
.
pole _FPIEEE_RECORD | opis |
---|---|
RoundingMode Precision |
Te unsigned int pola zawierają informacje o środowisku zmiennoprzecinkowym w momencie wystąpienia wyjątku. |
Operation |
To unsigned int pole wskazuje typ operacji, która spowodowała pułapkę. Jeśli typ jest porównaniem (_FpCodeCompare ), możesz podać jedną z wartości specjalnych _FPIEEE_COMPARE_RESULT (zgodnie z definicją w pliku Fpieee.h) w polu Result.Value . Typ konwersji (_FpCodeConvert ) wskazuje, że pułapka wystąpiła podczas operacji konwersji zmiennoprzecinkowych. Możesz przyjrzeć się typom Operand1 i Result , aby określić typ próby konwersji. |
Operand1 Operand2 Result |
Te _FPIEEE_VALUE struktury wskazują typy i wartości proponowanego wyniku i operandów. Każda struktura zawiera następujące pola:OperandValid - Flaga wskazująca, czy wartość odpowiadająca jest prawidłowa.Format — Typ danych odpowiedniej wartości. Typ formatu może zostać zwrócony, nawet jeśli odpowiadająca mu wartość jest nieprawidłowa.Value - Wynik lub wartość danych operandu. |
Cause Enable Status |
_FPIEEE_EXCEPTION_FLAGS zawiera pole bitowe dla każdego typu wyjątku zmiennoprzecinkowego. Istnieje korespondencja między tymi polami a argumentami używanymi do maskowania wyjątków dostarczonych do _controlfp elementu . Dokładne znaczenie poszczególnych bitów zależy od kontekstu:Cause — Każdy bit zestawu wskazuje określony wyjątek, który został zgłoszony.Enable - Każdy zestaw bit wskazuje, że określony wyjątek jest obecnie niemaskowany.Status - Każdy ustawiony bit wskazuje, że dany wyjątek jest obecnie oczekujący, który zawiera wyjątki, które nie zostały zgłoszone, ponieważ zostały one zamaskowane przez _controlfp . |
Oczekujące wyjątki, które są wyłączone, są zgłaszane po ich włączeniu. Te wyjątki mogą powodować niezdefiniowane zachowanie podczas używania _fpieee_flt
jako filtru wyjątków. Zawsze należy wywoływać _clearfp
przed włączeniem wyjątków zmiennoprzecinkowych.
Wymagania
Function | Wymagany nagłówek |
---|---|
_fpieee_flt |
<fpieee.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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
}
// ...
}
Zobacz też
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
_control87
, , _controlfp
__control87_2
_controlfp_s