_fpieee_flt
IEEE 浮動小数点の例外のユーザー定義トラップ ハンドラーを呼び出します。
int _fpieee_flt(
unsigned long excCode,
struct _EXCEPTION_POINTERS *excInfo,
int handler(_FPIEEE_RECORD *)
);
パラメーター
excCode
例外コード。excInfo
Windows NT の例外情報構造体へのポインター。handler
ユーザーの IEEE トラップ ハンドラー ルーチンへのポインター。
戻り値
_fpieee_flt の戻り値は handler で返される値です。したがってIEEE フィルター ルーチンは構造化例外処理機構の句以外で使用される (SEH) 場合があります。
解説
_fpieee_flt の関数はIEEE 浮動小数点例外のユーザー定義トラップ ハンドラーを呼び出しすべての関連情報を無効にします。このルーチンは例外フィルターと同様に必要なときに独自の IEEE 例外ハンドラーは起動する機能します。
Fpieee.h で定義されている _FPIEEE_RECORD の構造はIEEE 浮動小数点例外に関する情報が含まれています。この構造は _fpieee_flt をユーザー定義トラップに渡されます。
_FPIEEE_RECORD のフィールド |
Description |
---|---|
unsigned int RoundingMode, unsigned int Precision |
これらのフィールドは例外が発生したときの浮動小数点環境に関する情報が含まれています。 |
unsigned int Operation |
トラップを発生させた操作の種類を示します。型が比較 _FpCodeCompare() の場合Result.Value のフィールドの _FPIEEE_COMPARE_RESULT の特殊な値から 1 を Fpieee.h (で定義) 指定できます。点が浮動小数点変換操作中に発生したことを _FpCodeConvert(型変換) に示します。と変換の種類を確認するに Operand1 と Result の型を表示できます。 |
_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result |
これらの構造は提案された結果とオペランドの型と値を示しています : 応答の値が有効かどうかを示すフラグ OperandValid。 対応する値の Format のデータ型。書式の種類との対応する値が無効でが返されることがあります。 Value の結果オペランドのデータ値。 メモ : Operand3 は IPF (Itanium Processor Family) 関数でのみ使用されます (IPF)。 |
_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status |
_FPIEEE_EXCEPTION_FLAGS は浮動小数点例外の種類ごとに 1 ビットのフィールドが含まれています。 これらのフィールドと _controlfp に指定された例外をマスクに使用される引数間に互換性があります。 各ビットの厳密な意味はコンテキストに依存します : Cause は各セットのビット発生した例外を示します。 Enable は各セットのビット特定の例外が現在暴露されることを示します。 Status は各セットのビット特定の例外が現在保留中であることを示します。これは _controlfp では発生しなかった例外マスクが含まれています。 |
無効な例外はこれらを有効にするときに発生します。これにより未定義の動作が _fpieee_flt が例外フィルターとして使用することができます。浮動小数点の例外を有効にする前に必ずの呼び出し _clearfp。
必要条件
Function |
必須ヘッダー |
---|---|
_fpieee_flt |
<fpieee.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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
}
// ...
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。