● 関数リファレンス

コントロールワード値の設定

    void __stdcall  floatex_loadcw(unsigned int newcw);

引数

引数名意味
newcw新しいコントロールワード値

戻り値

無し

説明

新しいコントロールワード値を設定します。

次の値を単独、または OR 接合で指定します。


_control87 、_controlfp 、_controlfp_s(Microsoft C/C++の場合)と同じような設定を行う場合は、次の計算結果を指定します。

    (oldcw & ~mask) | (newcw & mask)

oldcwfloatex_storecw で得られます。
mask には次の値を単独、または OR 接合で指定します。

意味
FEX_MCW_EM割り込み例外
FEX_MCW_RC丸め制御
FEX_MCW_PC精度制御

これらの値は、各項目の値全てを OR 接合した値と同じです。
例えば、FEX_MCW_EM は、
    FEX_EM_INVALID | FEX_EM_DENORMAL | FEX_EM_ZERODIVIDE | FEX_EM_OVERFLOW |
    FEX_EM_UNDERFLOW | FEX_EM_INEXACT
と同じです。

割り込み例外についてはマスク設定なので、値をセットすると対象の例外が無効になります。指定の値だけ例外を有効にする場合は、次の値を設定します。
    FEX_MCW_EM ^ (有効にする例外1 | 有効にする例外2 | ...)

FPU_CONTROL 構造体

次の構造体を使用して設定する事もできます。

(FPU_CONTROL 構造体)

typedef struct {
    unsigned int        invalid : 1;
    unsigned int        denormal : 1;
    unsigned int        zerodivide : 1;
    unsigned int        overflow : 1;
    unsigned int        underflow : 1;
    unsigned int        inexact : 1;
    unsigned int        reserved1 : 2;
    unsigned int        precision : 2;
    unsigned int        rounding : 2;
    unsigned int        infinity : 1;
    unsigned int        reserved2 : 3;
} FPU_CONTROL,*PFPU_CONTROL;

この構造体は floatex.h 内で定義されています。

メンバ名意味
invalid無効操作例外マスク(IM)
denormalデノーマル・オペランド例外マスク(DM)
zerodivideゼロ除算例外マスク(ZM)
overflowオーバーフロー例外マスク(OM)
underflowアンダーフロー例外マスク(UM)
inexact不正確結果例外マスク(PM)
reserved1予約
precision精度制御(PC)
rounding丸め制御(RC)
infinity無限制御(X)
reserved2予約

変換には、次の共用体を使用する事もできます。この共用体は floatex.h 内で定義されています。

typedef union {
    unsigned int        dword;
    FPU_CONTROL         bits;
} FPU_CONTROL_DW,*PFPU_CONTROL_DW;