System.FSetExceptFlag

提供:RAD Studio API Documentation

Delphi

function FSetExceptFlag(NewFlags: UInt32; Excepts: UInt32): UInt32;

C++

extern DELPHI_PACKAGE UInt32 __fastcall FSetExceptFlag(UInt32 NewFlags, UInt32 Excepts = (unsigned)(0x3f));

プロパティ

種類 可視性 ソース ユニット 親
function public
System.pas
System.hpp
System System


説明

浮動小数点例外フラグを設定します。

FSetExceptFlag は、Excepts パラメータで指定された浮動小数点例外フラグを、NewFlags パラメータで指定された値に設定します。

Excepts と NewFlags は次の値の組み合わせになります。

定数
feeINEXACT
feeUNDERFLOW
feeOVERFLOW
feeDIVBYZERO
feeINVALID

FSetExceptFlag は、Excepts で指定された、演算ユニットの浮動小数点例外フラグの前の値を返します。

Excepts は、どの例外イベント フラグを変更して返すかを指定します。たとえば、Excepts が feeDIVBYZERO および feeINVALID の場合は、これらのフラグだけが、NewFlags で指定された値に従って変更され、FSetExceptFlag はこれら feeDIVBYZERO フラグと feeINVALID フラグについてのみ、古いステータスを返します。

Excepts が 0 の場合、FSetExceptFlag はフラグを変更せず、0 を返します。

デフォルトでは、Excepts = feeALLEXCEPT です。feeALLEXCEPT は、考えられるすべての浮動小数点例外フラグの集合を定義したものです。

例

FSetExceptFlag(0); // 保留中の浮動小数点例外をすべてクリア
FSetExceptFlag(0, feeOVERFLOW); // 保留中の浮動小数点オーバーフロー例外フラグをクリア。その他のフラグは変更せず
 
FSetExceptFlag(feeALLEXCEPTION, feeOVERFLOW + feeUNDERFLOW); // オーバーフロー例外フラグとアンダーフロー例外フラグを設定。その他のフラグは変更せず
 
FSetExceptFlag(feeOVERFLOW + feeUNDERFLOW); // オーバーフロー例外フラグとアンダーフロー例外フラグを設定し、その他のフラグ(不正確、ゼロ除算、無効な演算)をクリア

メモ:

  • 例外イベント フラグは累積的です。一部のプラットフォームではハードウェア例外をサポートしています。それぞれの例外が有効である場合、浮動小数点演算ユニットではハードウェア例外が直ちに発生します。その例外がマスクされている場合、その例外のイベントはイベント フラグに保存されます。
  • NewFlags、Excepts および戻り値はプラットフォームごとに異なります。異なるプラットフォーム間の互換性を保つには、SetExceptions と TArithmeticExceptions の使用を検討してください。

関連項目