Sdílet prostřednictvím


_fpieee_flt

Vyvolá obsluhu uživatelem definované přesahů IEEE 8bajtové výjimky.

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ýjimka systému Windows NT.

  • handler
    Ukazatel na uživatele IEEE na depeše rutiny.

Vrácená hodnota

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

Poznámky

_fpieee_flt Funkce vyvolá obsluhu uživatelem definované přesahů IEEE 8bajtové výjimky a obsahuje všechny příslušné informace.Tato rutina slouží jako filtr výjimka SEH mechanismus, který vyvolá vlastní potřeby zpracování výjimek IEEE.

_FPIEEE_RECORD Struktury, které jsou definovány v Fpieee.h, obsahuje informace týkající se IEEE 8bajtové výjimce.Tato struktura je předána přesahů uživatelem definovaný popisovač podle _fpieee_flt.

Pole _FPIEEE_RECORD

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 depeše.Pokud je typ porovnání (_FpCodeCompare), můžete zadat jednu zvláštní _FPIEEE_COMPARE_RESULT hodnoty (podle 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.Můžete si prohlédnout Operand1 a Result typy určit typ převodu pokusům.

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result

Tyto struktury označují typy a hodnoty operandy a navrhované výsledek:

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

FormatTyp dat odpovídající hodnotu.Typ formátu může být vrácena i v případě, že odpovídající hodnota není platná.

ValueHodnota dat výsledek nebo operand.

Poznámka: Operand3 se používá pouze s funkcí řady procesoru Itanium (IPF).

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

Je korespondence mezi tato pole a argumenty použité pro maskování výjimky k _controlfp.

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

CauseKaždý nastaven bit označuje zejména výjimku, která byla aktivována.

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

StatusKaždý nastaven bit označuje, že je nyní čeká na určité výjimky.Patří sem výjimky, které nebyla odchována protože byly maskovány _controlfp.

Čekající výjimky, které jsou zakázány jsou aktivována při jejich povolení.Může být výsledkem nedefinované chování při použití _fpieee_flt jako filtr výjimce.Volání _clearfp před povolením výjimky plovoucí bod.

Požadavky

Function

Požadované záhlaví

_fpieee_flt

<fpieee.h>

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

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 Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.

Viz také

Referenční dokumentace

Podpora s plovoucí desetinnou čárkou

_control87, _controlfp, __control87_2

_controlfp_s