_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