Udostępnij za pośrednictwem


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

Zobacz też

Informacje

Wsparcie zmiennoprzecinkowe

_control87, _controlfp, __control87_2

_controlfp_s