_fpieee_flt
Invokes a user-defined trap handler for IEEE floating-point exceptions.
Syntax
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
Parameters
excCode
Exception code.
excInfo
Pointer to the Windows NT exception information structure.
handler
Pointer to the user's IEEE trap-handler routine.
Return value
The return value of _fpieee_flt
is the value returned by handler
. As such, the IEEE filter routine might be used in the except clause of a structured exception-handling (SEH) mechanism.
Remarks
The _fpieee_flt
function invokes a user-defined trap handler for IEEE floating-point exceptions and provides it with all relevant information. This routine serves as an exception filter in the SEH mechanism, which invokes your own IEEE exception handler when necessary.
The _FPIEEE_RECORD
structure, defined in Fpieee.h, contains information pertaining to an IEEE floating-point exception. This structure is passed to the user-defined trap handler by _fpieee_flt
.
_FPIEEE_RECORD field | Description |
---|---|
RoundingMode Precision |
These unsigned int fields contain information about the floating-point environment at the time the exception occurred. |
Operation |
This unsigned int field indicates the type of operation that caused the trap. If the type is a comparison (_FpCodeCompare ), you can supply one of the special _FPIEEE_COMPARE_RESULT values (as defined in Fpieee.h) in the Result.Value field. The conversion type (_FpCodeConvert ) indicates that the trap occurred during a floating-point conversion operation. You can look at the Operand1 and Result types to determine the type of conversion being attempted. |
Operand1 Operand2 Result |
These _FPIEEE_VALUE structures indicate the types and values of the proposed result and operands. Each structure contains these fields:OperandValid - Flag indicating whether the responding value is valid.Format - Data type of the corresponding value. The format type might be returned even if the corresponding value isn't valid.Value - Result or operand data value. |
Cause Enable Status |
_FPIEEE_EXCEPTION_FLAGS contains a bit field for each type of floating point exception. There's a correspondence between these fields and the arguments used to mask the exceptions supplied to _controlfp . The exact meaning of each bit depends on context:Cause - Each set bit indicates the particular exception that was raised.Enable - Each set bit indicates that the particular exception is currently unmasked.Status - Each set bit indicates that the particular exception is currently pending, which includes exceptions that haven't been raised because they were masked by _controlfp . |
Pending exceptions that are disabled are raised when you enable them. These exceptions can result in undefined behavior when using _fpieee_flt
as an exception filter. Always call _clearfp
before enabling floating point exceptions.
Requirements
Function | Required header |
---|---|
_fpieee_flt |
<fpieee.h> |
For more compatibility information, see Compatibility.
Example
// 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
}
// ...
}
See also
Math and floating-point support
_control87
, _controlfp
, __control87_2
_controlfp_s
Feedback
https://aka.ms/ContentUserFeedback.
În curând: Pe parcursul anului 2024, vom elimina treptat Probleme legate de GitHub ca mecanism de feedback pentru conținut și îl vom înlocui cu un nou sistem de feedback. Pentru mai multe informații, consultați:Trimiteți și vizualizați feedback pentru