Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |
|---|---|
RoundingModePrecision |
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. |
Operand1Operand2Result |
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. |
CauseEnableStatus |
_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 _controlfpelementu . 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