System.FSetExceptFlag
Delphi
function FSetExceptFlag(NewFlags: UInt32; Excepts: UInt32): UInt32;
C++
extern DELPHI_PACKAGE unsigned __fastcall FSetExceptFlag(unsigned NewFlags, unsigned 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 の使用を検討してください。