_fpieee_flt
Wywołuje obsługi zdefiniowane przez użytkownika pułapki IEEE zmiennoprzecinkowych wyjątki.
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 pułapki IEEE użytkownika.
Wartość zwracana
Wartość zwracana przez _fpieee_flt jest wartością zwróconą przez handler.Jako takie, rutynowe IEEE filtr może być używany w z wyjątkiem klauzuli mechanizmu (SEH) strukturalnej obsługi wyjątków.
Uwagi
_fpieee_flt Funkcja wywołuje obsługi zdefiniowane przez użytkownika pułapki IEEE zmiennoprzecinkowych wyjątki i dostarcza wszelkich istotnych informacji.Ta procedura służy jako filtr wyjątków w mechanizm strukturalnej obsługi wyjątków, który wywołuje własne obsługi wyjątków IEEE, gdy jest to konieczne.
_FPIEEE_RECORD Struktury zdefiniowane w Fpieee.h, zawiera informacje odnoszące się do liczb zmiennoprzecinkowych wyjątek IEEE.Ta struktura jest przekazywana do obsługi pułapki zdefiniowane przez użytkownika przez _fpieee_flt.
Pole _FPIEEE_RECORD |
Opis |
---|---|
unsigned int RoundingMode, unsigned int Precision |
Pola te zawierają informacje o zmiennoprzecinkowych środowiska w czasie czy wystąpił wyjątek. |
unsigned int Operation |
Wskazuje typ operacji, która spowodowała pułapki.Jeśli typem jest porównanie (_FpCodeCompare), można podać jeden ze specjalnego _FPIEEE_COMPARE_RESULT wartości (jak określono w Fpieee.h) w Result.Value pola.Typ konwersji (_FpCodeConvert) wskazuje, że sidła wystąpił podczas operacji zmiennoprzecinkowych konwersji.Możesz obejrzeć Operand1 i Result typów, aby określić typ konwersji prób. |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result |
Struktury te wskazują typy oraz wartości proponowanych wynik i operandów: OperandValidFlaga wskazująca, czy odpowiada wartość jest nieprawidłowa. FormatTyp danych odpowiadające im wartości.Typ formatu może zostać zwrócona, nawet jeśli odpowiadająca jej wartość nie jest prawidłowa. ValueWartość danych wynik lub operandu. Uwaga: Operand3 jest używany tylko z funkcjami rodziny procesor Itanium (IPF). |
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status |
_FPIEEE_EXCEPTION_FLAGS zawiera jeden bit pole na typ wyjątku, ruchomy punkt. Istnieje korespondencja między te pola, a argumenty używane do zamaskowania wyjątki, dostarczonych do _controlfp. Dokładne znaczenie każdy bit zależy od kontekstu: CauseKażdy zestaw bit wskazuje określonego wyjątku, który został podniesiony. EnableKażdy ustawiony bit wskazuje, że szczególne wyjątek jest aktualnie zaznaczona. StatusKażdy ustawiony bit wskazuje, że szczególne wyjątek jest aktualnie oczekujących.Wartość ta obejmuje wyjątki, które nie były hodowane, ponieważ zostały one maskowane przez _controlfp. |
Do czasu wyjątków, które są wyłączone są wywoływane, gdy ich włączeniem.Może to doprowadzić do niezdefiniowanego zachowania podczas korzystania z _fpieee_flt jako filtru wyjątków.Zawsze używaj wywołania _clearfp przed włączeniem ruchomy punkt wyjątki.
Wymagania
Funkcja |
Wymaganego nagłówka |
---|---|
_fpieee_flt |
<fpieee.h> |
Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.
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
}
// ...
}
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.