次の方法で共有


_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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

浮動小数点サポート

_control87、_controlfp、__control87_2

_controlfp_s