共用方式為


_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 浮點例外狀況的使用者定義的設陷處理常式,並提供所有相關資訊。 此常式會當做在 SEH 機制,這會叫用您自己的 IEEE 例外處理常式時所需的例外狀況篩選條件。

_FPIEEE_RECORD Fpieee.h,在所定義的結構包含 IEEE 浮點例外狀況相關資訊。 這個結構會傳遞至使用者定義的設陷處理常式的_fpieee_flt。

_FPIEEE_RECORD 欄位

描述

unsigned int RoundingMode, unsigned int Precision

這些欄位會包含浮點環境的資訊同時發生的例外狀況。

unsigned int Operation

指示產生設陷的作業類型。 如果型別比較 (_FpCodeCompare),您可以自己提供一個特殊的_FPIEEE_COMPARE_RESULT值 (如圖所 Fpieee.h 中所定義) 置於Result.Value欄位。 轉換型別 (_FpCodeConvert) 表示的浮點數轉換作業期間發生的設陷。 您可以查看Operand1和 Result型別,判斷嘗試的轉換型別。

_FPIEEE_VALUE Operand1, _FPIEEE_VALUE Operand2, _FPIEEE_VALUE Operand3, _FPIEEE_VALUE Result

這些結構表示的型別和建議的結果和運算元的值:

OperandValid旗標是指示回應的值是否有效。

Format資料型別相對應的值。 即使相對應的值不正確,可能會傳回格式類型。

Value結果,或是運算元的資料值。

附註: Operand3並只能配合 Itanium 處理器系列 (IPF) 函式。

_FPIEEE_EXCEPTION_FLAGS Cause, _FPIEEE_EXCEPTION_FLAGS Enable, _FPIEEE_EXCEPTION_FLAGS Status

_FPIEEE_EXCEPTION_FLAGS 包含一個位元欄位,每一種類型的浮點例外。

這些欄位,並加上遮罩提供給例外狀況所用的引數之間的對應關係 _controlfp

每個位元的確切的意義視內容而定:

Cause每一組位元表示所引發的特定例外狀況。

Enable每一組位元表示特定的例外狀況是目前的遮罩。

Status每一組位元表示特定的例外狀況是目前擱置中。 這包括了不被升級,因為它們已加上遮罩的例外狀況_controlfp。

擱置中的已停用的例外狀況時,會引發您啟用它們。 這可能會導致未定義的行為時使用_fpieee_flt 為例外狀況篩選條件。 請務必呼叫 _clearfp ,才能啟用浮點例外。

需求

Function

所需的標頭

_fpieee_flt

<fpieee.h>

如需相容性資訊,請參閱相容性在簡介中。

範例

// 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