Udostępnij za pośrednictwem


_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 _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