Sdílet prostřednictvím


_fpieee_flt

Spustí obslužnou rutinu výjimky s plovoucí desetinnou čárkou IEEE přesahu definované uživatelem.

int _fpieee_flt( 
   unsigned long excCode,
   struct _EXCEPTION_POINTERS *excInfo,
   int handler(_FPIEEE_RECORD *) 
);

Parametry

  • excCode
    Kód výjimky.

  • excInfo
    Ukazatel na strukturu informací výjimku systému Windows NT.

  • handler
    Ukazatel na uživatele IEEE přesahů rutinu rutina.

Vrácená hodnota

Vrácená hodnota _fpieee_flt je hodnota vrácená handler.Jako takové rutinní IEEE filtru může být použita v s výjimkou klauzule strukturovaný mechanismus zpracování výjimek (SEH).

Poznámky

_fpieee_flt Vyvolá obslužnou rutinu výjimky s plovoucí desetinnou čárkou IEEE depeše uživatelem definované funkce a poskytuje všechny potřebné informace.Tato rutina slouží jako filtr výjimek v SEH mechanismus, který vyvolá vlastní obslužnou rutinu IEEE v případě potřeby.

_FPIEEE_RECORD Struktury, které jsou definovány v Fpieee.h, obsahuje informace vztahující se k výjimce s plovoucí desetinnou čárkou IEEE.Tato struktura je předán do obslužné rutiny vlastní soutisk podle _fpieee_flt.

_FPIEEE_RECORD pole

Description

unsigned int RoundingMode, unsigned int Precision

Tato pole obsahují informace o prostředí s plovoucí desetinnou čárkou v době došlo k výjimce.

unsigned int Operation

Označuje typ operace, která způsobila pasti.Pokud je typ porovnání (_FpCodeCompare), můžete zadat jednu zvláštní _FPIEEE_COMPARE_RESULT hodnot (podle definice v Fpieee.h) v Result.Value pole.Typ převodu (_FpCodeConvert) označuje, že během operace s plovoucí desetinnou čárkou převodu došlo k pasti.Podívejte se na Operand1 a Result k určení typu Probíhá pokus o provedení převodu typů.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Result

Tyto struktury označuje typy a hodnoty navrhovaných výsledků a operandy:

OperandValidPříznak označující, zda je odpovídající hodnota platná.

FormatTyp dat odpovídající hodnoty.Typ formátu může být vrácena, i když odpovídající hodnota není platná.

ValueVýsledek nebo operand hodnotu data.

_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status

_FPIEEE_EXCEPTION_FLAGS obsahuje jeden bit pole na typ výjimky plovoucí bod.

Existuje souvislost mezi tato pole a argumenty použité k maskování výjimek poskytnuty _controlfp.

Každý bit Přesný význam závisí na kontextu:

CauseKaždý nastavit bit označuje konkrétní výjimky, která byla vyvolána.

EnableKaždý nastavit bit označuje, že je aktuálně nemaskované určité výjimky.

StatusKaždý nastavit bit označuje, že je nyní čeká na určité výjimky.Jedná se o výjimky, které dosud byly vyvolány vzhledem k tomu, že byly maskovány pomocí _controlfp.

Až na výjimky, které jsou zakázány jsou vyvolány při jejich povolení.To může vést k nedefinované chování při používání _fpieee_flt jako filtr výjimek.Vždy volat _clearfp před povolením výjimky plovoucí bod.

Požadavky

Funkce

Požadované záhlaví

_fpieee_flt

<fpieee.h>

Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.

Příklad

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

   }

   // ...
}

Ekvivalent v rozhraní .NET Framework

Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.

Viz také

Referenční dokumentace

Podpora plovoucí desetinné čárky

_control87, _controlfp, __control87_2

_controlfp_s