_fpieee_flt
Vyvolá obslužnou rutinu soutisku definovanou uživatelem pro výjimky s plovoucí desetinou čárkou IEEE.
Syntaxe
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parametry
excCode
Kód výjimky.
excInfo
Ukazatel na informační strukturu systém Windows NT výjimek.
handler
Ukazatel na rutinu obslužné rutiny IEEE IEEE.
Vrácená hodnota
Návratová _fpieee_flt
hodnota je hodnota vrácená handler
hodnotou . Proto lze rutinu filtru IEEE použít v klauzuli s výjimkou mechanismu strukturovaného zpracování výjimek (SEH).
Poznámky
Funkce _fpieee_flt
vyvolá obslužnou rutinu soutisku definovanou uživatelem pro výjimky s plovoucí desetinou čárkou IEEE a poskytne jí všechny relevantní informace. Tato rutina slouží jako filtr výjimek v mechanismu SEH, který v případě potřeby vyvolá vlastní obslužnou rutinu výjimky IEEE.
Struktura _FPIEEE_RECORD
definovaná v Fpieee.h obsahuje informace týkající se výjimky s plovoucí desetinou čárkou IEEE. Tato struktura se předává obslužné rutině pasti definované uživatelem ._fpieee_flt
pole _FPIEEE_RECORD | Popis |
---|---|
RoundingMode Precision |
Tato unsigned int pole obsahují informace o prostředí s plovoucí desetinou čárkou v době, kdy došlo k výjimce. |
Operation |
Toto unsigned int pole označuje typ operace, která způsobila odchyt. Pokud je typ porovnání (_FpCodeCompare ), můžete do pole Result.Value zadat jednu ze speciálních _FPIEEE_COMPARE_RESULT hodnot (jak je definováno v Fpieee.h). Typ převodu (_FpCodeConvert ) označuje, že při operaci převodu s plovoucí desetinou čárkou došlo k depeše. Můžete se podívat na typy Operand1 a Result určit typ pokusu o převod. |
Operand1 Operand2 Result |
Tyto _FPIEEE_VALUE struktury označují typy a hodnoty navrhovaných výsledků a operandů. Každá struktura obsahuje tato pole:OperandValid – Příznak označující, zda je hodnota odpovědi platná.Format - Datový typ odpovídající hodnoty. Typ formátu může být vrácen i v případě, že odpovídající hodnota není platná.Value - Výsledek nebo hodnota dat operandu. |
Cause Enable Status |
_FPIEEE_EXCEPTION_FLAGS obsahuje bitové pole pro každý typ výjimky s plovoucí desetinou čárkou. Mezi těmito poli a argumenty použitými k maskování výjimek zadaných do _controlfp . Přesný význam každého bitu závisí na kontextu:Cause – Každý bit sady označuje konkrétní výjimku, která byla vyvolána.Enable – Každý bit sady označuje, že konkrétní výjimka je aktuálně odmaskována.Status - Každý bit sady označuje, že konkrétní výjimka je aktuálně čeká, což zahrnuje výjimky, které nebyly vyvolány, protože byly maskovány _controlfp . |
Čekající výjimky, které jsou zakázány, jsou vyvolány, když je povolíte. Tyto výjimky můžou mít za následek nedefinované chování při použití _fpieee_flt
jako filtru výjimky. Před povolením výjimek s plovoucí desetinou čárkou vždy volejte _clearfp
.
Požadavky
Function | Požadovaný hlavičkový soubor |
---|---|
_fpieee_flt |
<fpieee.h> |
Další informace o kompatibilitě najdete v 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
}
// ...
}
Viz také
Podpora pro matematiku a plovoucí desetinou čárku
_control87
, , _controlfp
__control87_2
_controlfp_s