_controlfp()

Note

ARM コンパイラツールチェーンでは、AArch64 ターゲット用の浮動小数点例外トラップはサポートされません。

float.h で定義されるこの関数は、Microsoft 製品との互換性を維持するために提供されています。 この関数を使用して、例外のトラップと丸めモードを制御できます。

_controlfp() の関数プロトタイプは次のとおりです。

unsigned int _controlfp(unsigned int new, unsigned int mask);

Note

この関数には、例外をサポートする浮動小数点モデルが必要です。 ARM コンパイラ 6 では、これはデフォルトで有効になっています。-ffast-math などの armclang コマンドラインオプションによって無効になります。

また、_controlfp() は、マスクを使用して制御ワードを修正し、修正するビットを切り離すことができます。 mask のビットにゼロが設定されている場合、それに対応する制御ワードのビットは変更されません。 mask のビットにゼロ以外の値が設定されている場合は、それに対応する制御ワードのビットに、new の対応するビットの値が設定されます。 戻り値は、制御ワードの前の状態となります。

Note

これは、マスクのワードにゼロを設定し、フラグのワードに 1 を設定することでビットを切り替えられる、__ieee_status() または __fp_status() の動作とは異なります。

Table 3 は、_controlfp() への引数を作成する場合に使用できるマクロを示しています。

Table 3. _controlfp の引数に使用されるマクロ

マクロ説明
_MCW_EMすべての例外ビットを保持するマスクが生成されます。
_EM_INVALID無効演算例外を示すビットが生成されます。
_EM_ZERODIVIDEゼロによる除算例外を示すビットが生成されます。
_EM_OVERFLOWオーバーフロー例外を示すビットが生成されます。
_EM_UNDERFLOWアンダーフロー例外を示すビットが生成されます。
_EM_INEXACT不正確結果例外を示すビットが生成されます。
_MCW_RC丸めモードフィールドのマスクが生成されます。
_RC_CHOPゼロへの丸めを示す丸めモードの値が生成されます。
_RC_UP切り上げを示す丸めモードの値が生成されます。
_RC_DOWN切り下げを示す丸めモードの値が生成されます。
_RC_NEAR近似値への丸めを示す丸めモードの値が生成されます。

Note

これらのマクロの値は、将来の ARM 製品のバージョンにおいても同じであるという保証はありません。 将来のリリースで値が変更されてもコードが機能するように、値ではなくマクロを使用して下さい。

例えば、丸めモードを切り下げに設定するには、以下の関数を呼び出します。

_controlfp(_RC_DOWN, _MCW_RC);

無効演算例外のトラップを有効にし、他のすべての例外のトラップを無効にするには、以下のように記述します。

_controlfp(_EM_INVALID, _MCW_EM);

不正確結果例外のトラップを無効にするには、以下のように記述します。

_controlfp(0, _EM_INEXACT);

Show/hide関連項目

タスク

ARM C ライブラリ、C++ ライブラリ、および浮動小数点サポートユーザガイド

参照
Copyright © 2014 ARM. All rights reserved.ARM DUI 0809BJ
Non-ConfidentialID121814